Commit 36f7a604 authored by David Howells's avatar David Howells

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

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/ethernet/.
Suggested-by: default avatarAlan Cox <gnomes@lxorguk.ukuu.org.uk>
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
cc: Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
cc: Jaroslav Kysela <perex@perex.cz>
cc: netdev@vger.kernel.org
cc: linux-parisc@vger.kernel.org
parent 062a92af
...@@ -1371,7 +1371,7 @@ el3_resume(struct device *pdev) ...@@ -1371,7 +1371,7 @@ el3_resume(struct device *pdev)
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
module_param(debug,int, 0); module_param(debug,int, 0);
module_param_array(irq, int, NULL, 0); module_param_hw_array(irq, int, irq, NULL, 0);
module_param(max_interrupt_work, int, 0); module_param(max_interrupt_work, int, 0);
MODULE_PARM_DESC(debug, "debug level (0-6)"); MODULE_PARM_DESC(debug, "debug level (0-6)");
MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)"); MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
......
...@@ -813,8 +813,8 @@ module_param(global_enable_wol, int, 0); ...@@ -813,8 +813,8 @@ module_param(global_enable_wol, int, 0);
module_param_array(enable_wol, int, NULL, 0); module_param_array(enable_wol, int, NULL, 0);
module_param(rx_copybreak, int, 0); module_param(rx_copybreak, int, 0);
module_param(max_interrupt_work, int, 0); module_param(max_interrupt_work, int, 0);
module_param(compaq_ioaddr, int, 0); module_param_hw(compaq_ioaddr, int, ioport, 0);
module_param(compaq_irq, int, 0); module_param_hw(compaq_irq, int, irq, 0);
module_param(compaq_device_id, int, 0); module_param(compaq_device_id, int, 0);
module_param(watchdog, int, 0); module_param(watchdog, int, 0);
module_param(global_use_mmio, int, 0); module_param(global_use_mmio, int, 0);
......
...@@ -74,8 +74,8 @@ static int bad[MAX_NE_CARDS]; ...@@ -74,8 +74,8 @@ static int bad[MAX_NE_CARDS];
static u32 ne_msg_enable; static u32 ne_msg_enable;
#ifdef MODULE #ifdef MODULE
module_param_array(io, int, NULL, 0); module_param_hw_array(io, int, ioport, NULL, 0);
module_param_array(irq, int, NULL, 0); module_param_hw_array(irq, int, irq, NULL, 0);
module_param_array(bad, int, NULL, 0); module_param_array(bad, int, NULL, 0);
module_param_named(msg_enable, ne_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH)); module_param_named(msg_enable, ne_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH));
MODULE_PARM_DESC(io, "I/O base address(es),required"); MODULE_PARM_DESC(io, "I/O base address(es),required");
......
...@@ -561,8 +561,8 @@ static struct net_device *dev_ultra[MAX_ULTRA_CARDS]; ...@@ -561,8 +561,8 @@ static struct net_device *dev_ultra[MAX_ULTRA_CARDS];
static int io[MAX_ULTRA_CARDS]; static int io[MAX_ULTRA_CARDS];
static int irq[MAX_ULTRA_CARDS]; static int irq[MAX_ULTRA_CARDS];
module_param_array(io, int, NULL, 0); module_param_hw_array(io, int, ioport, NULL, 0);
module_param_array(irq, int, NULL, 0); module_param_hw_array(irq, int, irq, NULL, 0);
module_param_named(msg_enable, ultra_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH)); module_param_named(msg_enable, ultra_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH));
MODULE_PARM_DESC(io, "I/O base address(es)"); MODULE_PARM_DESC(io, "I/O base address(es)");
MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)"); MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
......
...@@ -503,10 +503,10 @@ static int irq[MAX_WD_CARDS]; ...@@ -503,10 +503,10 @@ static int irq[MAX_WD_CARDS];
static int mem[MAX_WD_CARDS]; static int mem[MAX_WD_CARDS];
static int mem_end[MAX_WD_CARDS]; /* for non std. mem size */ static int mem_end[MAX_WD_CARDS]; /* for non std. mem size */
module_param_array(io, int, NULL, 0); module_param_hw_array(io, int, ioport, NULL, 0);
module_param_array(irq, int, NULL, 0); module_param_hw_array(irq, int, irq, NULL, 0);
module_param_array(mem, int, NULL, 0); module_param_hw_array(mem, int, iomem, NULL, 0);
module_param_array(mem_end, int, NULL, 0); module_param_hw_array(mem_end, int, iomem, NULL, 0);
module_param_named(msg_enable, wd_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH)); module_param_named(msg_enable, wd_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH));
MODULE_PARM_DESC(io, "I/O base address(es)"); MODULE_PARM_DESC(io, "I/O base address(es)");
MODULE_PARM_DESC(irq, "IRQ number(s) (ignored for PureData boards)"); MODULE_PARM_DESC(irq, "IRQ number(s) (ignored for PureData boards)");
......
...@@ -318,9 +318,9 @@ static int io[MAX_CARDS]; ...@@ -318,9 +318,9 @@ static int io[MAX_CARDS];
static int dma[MAX_CARDS]; static int dma[MAX_CARDS];
static int irq[MAX_CARDS]; static int irq[MAX_CARDS];
module_param_array(io, int, NULL, 0); module_param_hw_array(io, int, ioport, NULL, 0);
module_param_array(dma, int, NULL, 0); module_param_hw_array(dma, int, dma, NULL, 0);
module_param_array(irq, int, NULL, 0); module_param_hw_array(irq, int, irq, NULL, 0);
module_param(lance_debug, int, 0); module_param(lance_debug, int, 0);
MODULE_PARM_DESC(io, "LANCE/PCnet I/O base address(es),required"); MODULE_PARM_DESC(io, "LANCE/PCnet I/O base address(es),required");
MODULE_PARM_DESC(dma, "LANCE/PCnet ISA DMA channel (ignored for some devices)"); MODULE_PARM_DESC(dma, "LANCE/PCnet ISA DMA channel (ignored for some devices)");
......
...@@ -1227,9 +1227,9 @@ static void set_multicast_list(struct net_device *dev) ...@@ -1227,9 +1227,9 @@ static void set_multicast_list(struct net_device *dev)
#ifdef MODULE #ifdef MODULE
static struct net_device *dev_ni65; static struct net_device *dev_ni65;
module_param(irq, int, 0); module_param_hw(irq, int, irq, 0);
module_param(io, int, 0); module_param_hw(io, int, ioport, 0);
module_param(dma, int, 0); module_param_hw(dma, int, dma, 0);
MODULE_PARM_DESC(irq, "ni6510 IRQ number (ignored for some cards)"); MODULE_PARM_DESC(irq, "ni6510 IRQ number (ignored for some cards)");
MODULE_PARM_DESC(io, "ni6510 I/O base address"); MODULE_PARM_DESC(io, "ni6510 I/O base address");
MODULE_PARM_DESC(dma, "ni6510 ISA DMA channel (ignored for some cards)"); MODULE_PARM_DESC(dma, "ni6510 ISA DMA channel (ignored for some cards)");
......
...@@ -1704,12 +1704,12 @@ static int use_dma; /* These generate unused var warnings if ALLOW_DMA = 0 */ ...@@ -1704,12 +1704,12 @@ static int use_dma; /* These generate unused var warnings if ALLOW_DMA = 0 */
static int dma; static int dma;
static int dmasize = 16; /* or 64 */ static int dmasize = 16; /* or 64 */
module_param(io, int, 0); module_param_hw(io, int, ioport, 0);
module_param(irq, int, 0); module_param_hw(irq, int, irq, 0);
module_param(debug, int, 0); module_param(debug, int, 0);
module_param_string(media, media, sizeof(media), 0); module_param_string(media, media, sizeof(media), 0);
module_param(duplex, int, 0); module_param(duplex, int, 0);
module_param(dma , int, 0); module_param_hw(dma , int, dma, 0);
module_param(dmasize , int, 0); module_param(dmasize , int, 0);
module_param(use_dma , int, 0); module_param(use_dma , int, 0);
MODULE_PARM_DESC(io, "cs89x0 I/O base address"); MODULE_PARM_DESC(io, "cs89x0 I/O base address");
......
...@@ -1015,7 +1015,7 @@ static int compact_infoblock(struct net_device *dev, u_char count, u_char *p ...@@ -1015,7 +1015,7 @@ static int compact_infoblock(struct net_device *dev, u_char count, u_char *p
static int io=0x0;/* EDIT THIS LINE FOR YOUR CONFIGURATION IF NEEDED */ static int io=0x0;/* EDIT THIS LINE FOR YOUR CONFIGURATION IF NEEDED */
module_param(io, int, 0); module_param_hw(io, int, ioport, 0);
module_param(de4x5_debug, int, 0); module_param(de4x5_debug, int, 0);
module_param(dec_only, int, 0); module_param(dec_only, int, 0);
module_param(args, charp, 0); module_param(args, charp, 0);
......
...@@ -2966,7 +2966,7 @@ MODULE_DESCRIPTION("HP CASCADE Architecture Driver for 100VG-AnyLan Network Adap ...@@ -2966,7 +2966,7 @@ MODULE_DESCRIPTION("HP CASCADE Architecture Driver for 100VG-AnyLan Network Adap
#define HP100_DEVICES 5 #define HP100_DEVICES 5
/* Parameters set by insmod */ /* Parameters set by insmod */
static int hp100_port[HP100_DEVICES] = { 0, [1 ... (HP100_DEVICES-1)] = -1 }; static int hp100_port[HP100_DEVICES] = { 0, [1 ... (HP100_DEVICES-1)] = -1 };
module_param_array(hp100_port, int, NULL, 0); module_param_hw_array(hp100_port, int, ioport, NULL, 0);
/* List of devices */ /* List of devices */
static struct net_device *hp100_devlist[HP100_DEVICES]; static struct net_device *hp100_devlist[HP100_DEVICES];
......
...@@ -151,8 +151,8 @@ MODULE_LICENSE("GPL"); ...@@ -151,8 +151,8 @@ MODULE_LICENSE("GPL");
module_param(max_interrupt_work, int, 0); module_param(max_interrupt_work, int, 0);
module_param(debug, int, 0); module_param(debug, int, 0);
module_param_array(io, int, NULL, 0); module_param_hw_array(io, int, ioport, NULL, 0);
module_param_array(irq, int, NULL, 0); module_param_hw_array(irq, int, irq, NULL, 0);
module_param_array(xcvr, int, NULL, 0); module_param_array(xcvr, int, NULL, 0);
MODULE_PARM_DESC(max_interrupt_work, "ATP maximum events handled per interrupt"); MODULE_PARM_DESC(max_interrupt_work, "ATP maximum events handled per interrupt");
MODULE_PARM_DESC(debug, "ATP debug level (0-7)"); MODULE_PARM_DESC(debug, "ATP debug level (0-7)");
......
...@@ -1501,8 +1501,8 @@ static void smc_set_multicast_list(struct net_device *dev) ...@@ -1501,8 +1501,8 @@ static void smc_set_multicast_list(struct net_device *dev)
static struct net_device *devSMC9194; static struct net_device *devSMC9194;
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
module_param(io, int, 0); module_param_hw(io, int, ioport, 0);
module_param(irq, int, 0); module_param_hw(irq, int, irq, 0);
module_param(ifport, int, 0); module_param(ifport, int, 0);
MODULE_PARM_DESC(io, "SMC 99194 I/O base address"); MODULE_PARM_DESC(io, "SMC 99194 I/O base address");
MODULE_PARM_DESC(irq, "SMC 99194 IRQ number"); MODULE_PARM_DESC(irq, "SMC 99194 IRQ number");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment