• Hector Martin's avatar
    firewire: Add dummy read_csr/write_csr functions · e70b6693
    Hector Martin authored
    (Hector Martin wrote)
    This fixes segfaults when a card gets yanked off of the PCIe bus while
    busy, e.g. with a userspace app trying to get the cycle time:
    
    [8638860.994310] Call Trace:
    [8638860.994313]  ioctl_get_cycle_timer2+0x4f/0xd0 [firewire_core]
    [8638860.994323]  fw_device_op_ioctl+0xae/0x150 [firewire_core]
    [8638860.994328]  __x64_sys_ioctl+0x7d/0xb0
    [8638860.994332]  do_syscall_64+0x45/0x80
    [8638860.994337]  entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    (Takashi Sakamoto wrote)
    As long as reading commit 20802224 ("firewire: core: add forgotten
    dummy driver methods, remove unused ones"), three functions are not
    implemeted in dummy driver for reason; .read_csr, .write_csr, and
    .set_config_rom.
    
    In core of Linux FireWire subsystem, the callback of .set_config_rom is
    under acquisition of mutual exclusive for local list of card. The
    acquision is also done in process for removal of card, therefore it's
    safe for missing implementation of .set_config_rom.
    
    On the other hand, no lock primitive accompanies any call of .read_csr and
    .write_csr. For userspace client, check of node shutdown is done in the
    beginning of dispatch of ioctl request, while node shifts to shutdown
    state in workqueue context enough after card shifts to dummy driver. It's
    probable that these two functions are called for the dummy driver by the
    code of userspace client. In-kernel unit driver has similar situation.
    It's better to add implementation of the two functions for dummy driver.
    Signed-off-by: default avatarHector Martin <marcan@marcan.st>
    Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://lore.kernel.org/r/20220405072221.226217-2-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    e70b6693
core-card.c 19.1 KB