lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 19 Apr 2022 08:44:34 +0000
From:   "Zhang, Tianfei" <tianfei.zhang@...el.com>
To:     "Weight, Russell H" <russell.h.weight@...el.com>,
        "mcgrof@...nel.org" <mcgrof@...nel.org>,
        "rafael@...nel.org" <rafael@...nel.org>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
CC:     "trix@...hat.com" <trix@...hat.com>,
        "lgoncalv@...hat.com" <lgoncalv@...hat.com>,
        "Xu, Yilun" <yilun.xu@...el.com>, "Wu, Hao" <hao.wu@...el.com>,
        "matthew.gerlach@...ux.intel.com" <matthew.gerlach@...ux.intel.com>,
        "Muddebihal, Basheer Ahmed" <basheer.ahmed.muddebihal@...el.com>
Subject: RE: [PATCH v3 0/8] Extend FW framework for user FW uploads



> -----Original Message-----
> From: Weight, Russell H <russell.h.weight@...el.com>
> Sent: Tuesday, April 19, 2022 6:38 AM
> To: mcgrof@...nel.org; rafael@...nel.org; linux-kernel@...r.kernel.org
> Cc: trix@...hat.com; lgoncalv@...hat.com; Xu, Yilun <yilun.xu@...el.com>;
> Wu, Hao <hao.wu@...el.com>; matthew.gerlach@...ux.intel.com; Muddebihal,
> Basheer Ahmed <basheer.ahmed.muddebihal@...el.com>; Zhang, Tianfei
> <tianfei.zhang@...el.com>; Weight, Russell H <russell.h.weight@...el.com>
> Subject: [PATCH v3 0/8] Extend FW framework for user FW uploads
> 
> Extend the firmware loader subsystem to support a persistent sysfs interface
> that userspace may use to initiate a firmware update. For example, FPGA based
> PCIe cards automatically load firmware and FPGA images from local FLASH when
> the card boots. The images in FLASH may be updated with new images that are
> uploaded by the user.
> 
> A device driver may call firmware_upload_register() to expose persistent
> "loading" and "data" sysfs files at /sys/class/firmare/<NAME>/*. These files are
> used in the same way as the fallback sysfs "loading" and "data"
> files. However, when 0 is written to "loading" to complete the write of firmware
> data, the data is also transferred to the lower-level driver using pre-registered
> call-back functions. The data transfer is done in the context of a kernel worker
> thread.
> 
> Additional sysfs nodes are added in the same location as "loading" and "data" to
> monitor the transfer of the image data to the device using callback functions
> provided by the lower-level device driver and to allow the data transfer to be
> cancelled.
> 
> Example usage:
> 
> $ pwd
> /sys/class/firmware/secure-update.1
> $ ls
> cancel  device  loading  remaining_size  subsystem
> data    error   power    status          uevent
> $ echo 1 > loading
> $ cat /tmp/firmware.bin > data
> $ echo 0 > loading
> $ while :; do cat status; cat remaining_size ; sleep 3; done preparing
> 44590080
> <--snip-->
> transferring
> 44459008
> transferring
> 44311552
> <--snip-->
> transferring
> 173056
> <--snip-->
> programming
> 0
> <--snip-->
> idle
> 0
> ^C
> $ cat error
> 
> The first two patches in this set make minor changes to enable the fw_priv data
> structure and the sysfs interfaces to be used multiple times during the existence
> of the device driver instance. The third patch is mostly a reorganization of
> existing code in preparation for sharing common code with the firmware-upload
> support. The fourth and fifth patches provide the code for user-initiated
> firmware uploads. The final 3 patches extend selftest support to test firmware-
> upload functionality.
> 
> 
> Changelog v2 -> v3:
>   - Added Reviewed-by tag
>   - Added kdoc support for enum fw_upload_prog progress codes
> 
> Changelog v1 -> v2:
>   - Rebased to 5.18-rc2.
>   - It was discovered that the new function in v1, fw_state_is_done(), is
>     equivalent to the existing fw_sysfs_done() function. Renamed
>     fw_sysfs_done() and fw_sysfs_loading() to fw_state_is_done() and
>     fw_state_is_loading() respectively, and placed them along side companion
>     functions in drivers/base/firmware_loader/firmware.h.
>   - Removed the "if !fw_sysfs_done(fw_priv))" condition in switch case 1 of
>     firmware_loading_store(). It is rendered unnecessary by other changes
>     to the function.
>   - Updated documentation Date and KernelVersion fields to July 2022
>     and 5.19.
>   - Unconditionally set fw_priv->is_paged_buf to true in
>     firmware_upload_register();
> 
> Changelog RFC -> v1:
>   - Renamed files fw_sysfs.c and fw_sysfs.h to sysfs.c and sysfs.h
>   - Moved "MODULE_IMPORT_NS(FIRMWARE_LOADER_PRIVATE);" from sysfs.c
> to
>     sysfs.h to address an error identified by the kernel test robot
>     <lkp@...el.com>
>   - renamed fw_upload_register() and fw_upload_unregister() to
>     firmware_upload_register() and fw_upload_unregister().
>   - Moved ifdef'd section of code out of firmware_loading_store() in sysfs.c
>     into a new function, fw_upload_start(), in sysfs_upload.c.
>   - Changed #defines to enums for error codes and progress states
>   - Added additional kernel-doc supported symbols into the documentation.
>     Some rewording in documentation as well.
>   - Added module reference counting for the parent module in the
>     firmware_upload_register() and firmware_upload_unregister() functions
>     to fix problems found when testing with test_firmware module.
>   - Removed unnecessary module reference counting for THIS_MODULE.
>   - Added a new patch to modify the test_firmware module to support
>     testing of the firmware upload mechanism.
>   - Added a new patch to modify the test_firmware module to support
>     error injection for firmware upload.
>   - Added a new patch to extend the existing firmware selftests to cover
>     firmware upload.
> 
> Russ Weight (8):
>   firmware_loader: Clear data and size in fw_free_paged_buf
>   firmware_loader: Check fw_state_is_done in loading_store
>   firmware_loader: Split sysfs support from fallback
>   firmware_loader: Add firmware-upload support
>   firmware_loader: Add sysfs nodes to monitor fw_upload
>   test_firmware: Add test support for firmware upload
>   test_firmware: Error injection for firmware upload
>   selftests: firmware: Add firmware upload selftests
> 
>  .../ABI/testing/sysfs-class-firmware          |  77 ++++
>  .../driver-api/firmware/fw_upload.rst         | 126 +++++
>  Documentation/driver-api/firmware/index.rst   |   1 +
>  drivers/base/firmware_loader/Kconfig          |  18 +
>  drivers/base/firmware_loader/Makefile         |   2 +
>  drivers/base/firmware_loader/fallback.c       | 430 ------------------
>  drivers/base/firmware_loader/fallback.h       |  46 +-
>  drivers/base/firmware_loader/firmware.h       |  16 +
>  drivers/base/firmware_loader/main.c           |  18 +-
>  drivers/base/firmware_loader/sysfs.c          | 423 +++++++++++++++++
>  drivers/base/firmware_loader/sysfs.h          | 100 ++++
>  drivers/base/firmware_loader/sysfs_upload.c   | 397 ++++++++++++++++
>  drivers/base/firmware_loader/sysfs_upload.h   |  54 +++
>  include/linux/firmware.h                      |  82 ++++
>  lib/test_firmware.c                           | 378 +++++++++++++++
>  tools/testing/selftests/firmware/Makefile     |   2 +-
>  tools/testing/selftests/firmware/config       |   1 +
>  tools/testing/selftests/firmware/fw_lib.sh    |   7 +
>  .../selftests/firmware/fw_run_tests.sh        |   4 +
>  tools/testing/selftests/firmware/fw_upload.sh | 214 +++++++++
>  20 files changed, 1910 insertions(+), 486 deletions(-)  create mode 100644
> Documentation/ABI/testing/sysfs-class-firmware
>  create mode 100644 Documentation/driver-api/firmware/fw_upload.rst
>  create mode 100644 drivers/base/firmware_loader/sysfs.c
>  create mode 100644 drivers/base/firmware_loader/sysfs.h
>  create mode 100644 drivers/base/firmware_loader/sysfs_upload.c
>  create mode 100644 drivers/base/firmware_loader/sysfs_upload.h
>  create mode 100755 tools/testing/selftests/firmware/fw_upload.sh

Hi Russ,
I have tested and reviewed  this patchset, it looks good for me.

Reviewed-by: Tianfei zhang <tianfei.zhang@...el.com>
> 
> --
> 2.25.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ