|
Message-Id: <20200520064726.31838-2-o-takashi@sakamocchi.jp> Date: Wed, 20 May 2020 15:47:25 +0900 From: Takashi Sakamoto <o-takashi@...amocchi.jp> To: oscar.carter@....com, keescook@...omium.org, mchehab@...nel.org, clemens@...isch.de, tiwai@...e.de, perex@...ex.cz Cc: kernel-hardening@...ts.openwall.com, linux1394-devel@...ts.sourceforge.net, linux-kernel@...r.kernel.org, linux-media@...r.kernel.org, levonshe@...il.com, alsa-devel@...a-project.org, stefanr@...6.in-berlin.de Subject: [PATCH 1/2] firewire-core: add kernel API to construct multichannel isoc context In 1394 OHCI specification, IR context has several modes. One of mode is 'multiChanMode'. For this mode, Linux FireWire stack has FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL flag apart from FW_ISO_CONTEXT_RECEIVE, and associated internal callback. However, code of firewire-core driver includes cast of function callback for the mode and this brings inconvenient to effort of Control Flow Integrity builds. This commit is a preparation to remove the cast. A new kernel API for the mode is added and existent API is specific for FW_ISO_CONTEXT_RECEIVE and FW_ISO_CONTEXT_TRANSMIT modes. Actually, no in-kernel driver uses the mode and the additional kernel API is never used at present. Reported-by: Oscar Carter <oscar.carter@....com> Reference: https://lore.kernel.org/lkml/20200519173425.4724-1-oscar.carter@gmx.com/ Signed-off-by: Takashi Sakamoto <o-takashi@...amocchi.jp> --- drivers/firewire/core-iso.c | 17 +++++++++++++++++ include/linux/firewire.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/drivers/firewire/core-iso.c b/drivers/firewire/core-iso.c index 185b0b78b3d6..07e967594f27 100644 --- a/drivers/firewire/core-iso.c +++ b/drivers/firewire/core-iso.c @@ -152,6 +152,23 @@ struct fw_iso_context *fw_iso_context_create(struct fw_card *card, } EXPORT_SYMBOL(fw_iso_context_create); +struct fw_iso_context *fw_iso_mc_context_create(struct fw_card *card, + int type, int channel, int speed, size_t header_size, + fw_iso_mc_callback_t callback, void *callback_data) +{ + struct fw_iso_context *ctx; + + ctx = fw_iso_context_create(card, type, channel, speed, header_size, + NULL, callback_data); + if (IS_ERR(ctx)) + return ctx; + + ctx->callback.mc = callback; + + return ctx; +} +EXPORT_SYMBOL(fw_iso_mc_context_create); + void fw_iso_context_destroy(struct fw_iso_context *ctx) { ctx->card->driver->free_iso_context(ctx); diff --git a/include/linux/firewire.h b/include/linux/firewire.h index aec8f30ab200..9477814ab12a 100644 --- a/include/linux/firewire.h +++ b/include/linux/firewire.h @@ -453,6 +453,9 @@ struct fw_iso_context { struct fw_iso_context *fw_iso_context_create(struct fw_card *card, int type, int channel, int speed, size_t header_size, fw_iso_callback_t callback, void *callback_data); +struct fw_iso_context *fw_iso_mc_context_create(struct fw_card *card, + int type, int channel, int speed, size_t header_size, + fw_iso_mc_callback_t callback, void *callback_data); int fw_iso_context_set_channels(struct fw_iso_context *ctx, u64 *channels); int fw_iso_context_queue(struct fw_iso_context *ctx, struct fw_iso_packet *packet, -- 2.25.1
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.