Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Annotate hardware config module parameters in drivers/net/irda/

When the kernel is running in secure boot mode, we lock down the kernel to
prevent userspace from modifying the running kernel image. Whilst this
includes prohibiting access to things like /dev/mem, it must also prevent
access by means of configuring driver modules in such a way as to cause a
device to access or modify the kernel image.

To this end, annotate module_param* statements that refer to hardware
configuration and indicate for future reference what type of parameter they
specify. The parameter parser in the core sees this information and can
skip such parameters with an error message if the kernel is locked down.
The module initialisation then runs as normal, but just sees whatever the
default values for those parameters is.

Note that we do still need to do the module initialisation because some
drivers have viable defaults set in case parameters aren't specified and
some drivers support automatic configuration (e.g. PNP or PCI) in addition
to manually coded parameters.

This patch annotates drivers in drivers/net/irda/.

Suggested-by: Alan Cox <gnomes@lxorguk.ukuu.org.uk>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Samuel Ortiz <samuel@sortiz.org>
cc: netdev@vger.kernel.org

+13 -13
+3 -3
drivers/net/irda/ali-ircc.c
··· 2207 2207 MODULE_ALIAS("platform:" ALI_IRCC_DRIVER_NAME); 2208 2208 2209 2209 2210 - module_param_array(io, int, NULL, 0); 2210 + module_param_hw_array(io, int, ioport, NULL, 0); 2211 2211 MODULE_PARM_DESC(io, "Base I/O addresses"); 2212 - module_param_array(irq, int, NULL, 0); 2212 + module_param_hw_array(irq, int, irq, NULL, 0); 2213 2213 MODULE_PARM_DESC(irq, "IRQ lines"); 2214 - module_param_array(dma, int, NULL, 0); 2214 + module_param_hw_array(dma, int, dma, NULL, 0); 2215 2215 MODULE_PARM_DESC(dma, "DMA channels"); 2216 2216 2217 2217 module_init(ali_ircc_init);
+3 -3
drivers/net/irda/nsc-ircc.c
··· 2396 2396 2397 2397 module_param(qos_mtt_bits, int, 0); 2398 2398 MODULE_PARM_DESC(qos_mtt_bits, "Minimum Turn Time"); 2399 - module_param_array(io, int, NULL, 0); 2399 + module_param_hw_array(io, int, ioport, NULL, 0); 2400 2400 MODULE_PARM_DESC(io, "Base I/O addresses"); 2401 - module_param_array(irq, int, NULL, 0); 2401 + module_param_hw_array(irq, int, irq, NULL, 0); 2402 2402 MODULE_PARM_DESC(irq, "IRQ lines"); 2403 - module_param_array(dma, int, NULL, 0); 2403 + module_param_hw_array(dma, int, dma, NULL, 0); 2404 2404 MODULE_PARM_DESC(dma, "DMA channels"); 2405 2405 module_param(dongle_id, int, 0); 2406 2406 MODULE_PARM_DESC(dongle_id, "Type-id of used dongle");
+5 -5
drivers/net/irda/smsc-ircc2.c
··· 82 82 83 83 #define DMA_INVAL 255 84 84 static int ircc_dma = DMA_INVAL; 85 - module_param(ircc_dma, int, 0); 85 + module_param_hw(ircc_dma, int, dma, 0); 86 86 MODULE_PARM_DESC(ircc_dma, "DMA channel"); 87 87 88 88 #define IRQ_INVAL 255 89 89 static int ircc_irq = IRQ_INVAL; 90 - module_param(ircc_irq, int, 0); 90 + module_param_hw(ircc_irq, int, irq, 0); 91 91 MODULE_PARM_DESC(ircc_irq, "IRQ line"); 92 92 93 93 static int ircc_fir; 94 - module_param(ircc_fir, int, 0); 94 + module_param_hw(ircc_fir, int, ioport, 0); 95 95 MODULE_PARM_DESC(ircc_fir, "FIR Base Address"); 96 96 97 97 static int ircc_sir; 98 - module_param(ircc_sir, int, 0); 98 + module_param_hw(ircc_sir, int, ioport, 0); 99 99 MODULE_PARM_DESC(ircc_sir, "SIR Base Address"); 100 100 101 101 static int ircc_cfg; 102 - module_param(ircc_cfg, int, 0); 102 + module_param_hw(ircc_cfg, int, ioport, 0); 103 103 MODULE_PARM_DESC(ircc_cfg, "Configuration register base address"); 104 104 105 105 static int ircc_transceiver;
+2 -2
drivers/net/irda/w83977af_ir.c
··· 1263 1263 1264 1264 module_param(qos_mtt_bits, int, 0); 1265 1265 MODULE_PARM_DESC(qos_mtt_bits, "Mimimum Turn Time"); 1266 - module_param_array(io, int, NULL, 0); 1266 + module_param_hw_array(io, int, ioport, NULL, 0); 1267 1267 MODULE_PARM_DESC(io, "Base I/O addresses"); 1268 - module_param_array(irq, int, NULL, 0); 1268 + module_param_hw_array(irq, int, irq, NULL, 0); 1269 1269 MODULE_PARM_DESC(irq, "IRQ lines"); 1270 1270 1271 1271 /*