Files
Centos-kernel-stream-10/drivers/base/firmware_loader/fallback_table.c
T
Waiman Long 47a6d9810b treewide: const qualify ctl_tables where applicable
JIRA: https://issues.redhat.com/browse/RHEL-154147
Conflicts:
  The following hunks that are not applicable are dropped.
   - arch/riscv/kernel/process.c
   - arch/s390/mm/pgalloc.c
   - drivers/gpu/drm/i915/i915_perf.c
   - drivers/gpu/drm/xe/xe_observation.c
   - drivers/tty/tty_io.c
   - fs/fuse/sysctl.c
   - kernel/pid.c

commit 1751f872cc97f992ed5c4c72c55588db1f0021e1
Author: Joel Granados <joel.granados@kernel.org>
Date:   Tue, 28 Jan 2025 13:48:37 +0100

    treewide: const qualify ctl_tables where applicable

    Add the const qualifier to all the ctl_tables in the tree except for
    watchdog_hardlockup_sysctl, memory_allocation_profiling_sysctls,
    loadpin_sysctl_table and the ones calling register_net_sysctl (./net,
    drivers/inifiniband dirs). These are special cases as they use a
    registration function with a non-const qualified ctl_table argument or
    modify the arrays before passing them on to the registration function.

    Constifying ctl_table structs will prevent the modification of
    proc_handler function pointers as the arrays would reside in .rodata.
    This is made possible after commit 78eb4ea25c ("sysctl: treewide:
    constify the ctl_table argument of proc_handlers") constified all the
    proc_handlers.

    Created this by running an spatch followed by a sed command:
    Spatch:
        virtual patch

        @
        depends on !(file in "net")
        disable optional_qualifier
        @

        identifier table_name != {
          watchdog_hardlockup_sysctl,
          iwcm_ctl_table,
          ucma_ctl_table,
          memory_allocation_profiling_sysctls,
          loadpin_sysctl_table
        };
        @@

        + const
        struct ctl_table table_name [] = { ... };

    sed:
        sed --in-place \
          -e "s/struct ctl_table .table = &uts_kern/const struct ctl_table *table = \&uts_kern/" \
          kernel/utsname_sysctl.c

    Reviewed-by: Song Liu <song@kernel.org>
    Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org> # for kernel/trace/
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> # SCSI
    Reviewed-by: Darrick J. Wong <djwong@kernel.org> # xfs
    Acked-by: Jani Nikula <jani.nikula@intel.com>
    Acked-by: Corey Minyard <cminyard@mvista.com>
    Acked-by: Wei Liu <wei.liu@kernel.org>
    Acked-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Bill O'Donnell <bodonnel@redhat.com>
    Acked-by: Baoquan He <bhe@redhat.com>
    Acked-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
    Acked-by: Anna Schumaker <anna.schumaker@oracle.com>
    Signed-off-by: Joel Granados <joel.granados@kernel.org>

Signed-off-by: Waiman Long <longman@redhat.com>
2026-03-08 12:39:41 -04:00

69 lines
1.8 KiB
C

// SPDX-License-Identifier: GPL-2.0
#include <linux/types.h>
#include <linux/kconfig.h>
#include <linux/list.h>
#include <linux/slab.h>
#include <linux/export.h>
#include <linux/security.h>
#include <linux/highmem.h>
#include <linux/umh.h>
#include <linux/sysctl.h>
#include "fallback.h"
#include "firmware.h"
/*
* firmware fallback configuration table
*/
struct firmware_fallback_config fw_fallback_config = {
.force_sysfs_fallback = IS_ENABLED(CONFIG_FW_LOADER_USER_HELPER_FALLBACK),
.loading_timeout = 60,
.old_timeout = 60,
};
EXPORT_SYMBOL_NS_GPL(fw_fallback_config, "FIRMWARE_LOADER_PRIVATE");
#ifdef CONFIG_SYSCTL
static const struct ctl_table firmware_config_table[] = {
{
.procname = "force_sysfs_fallback",
.data = &fw_fallback_config.force_sysfs_fallback,
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = proc_douintvec_minmax,
.extra1 = SYSCTL_ZERO,
.extra2 = SYSCTL_ONE,
},
{
.procname = "ignore_sysfs_fallback",
.data = &fw_fallback_config.ignore_sysfs_fallback,
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = proc_douintvec_minmax,
.extra1 = SYSCTL_ZERO,
.extra2 = SYSCTL_ONE,
},
};
static struct ctl_table_header *firmware_config_sysct_table_header;
int register_firmware_config_sysctl(void)
{
firmware_config_sysct_table_header =
register_sysctl("kernel/firmware_config",
firmware_config_table);
if (!firmware_config_sysct_table_header)
return -ENOMEM;
return 0;
}
EXPORT_SYMBOL_NS_GPL(register_firmware_config_sysctl, "FIRMWARE_LOADER_PRIVATE");
void unregister_firmware_config_sysctl(void)
{
unregister_sysctl_table(firmware_config_sysct_table_header);
firmware_config_sysct_table_header = NULL;
}
EXPORT_SYMBOL_NS_GPL(unregister_firmware_config_sysctl, "FIRMWARE_LOADER_PRIVATE");
#endif /* CONFIG_SYSCTL */