]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
drivers/net: Remove IRQF_SAMPLE_RANDOM flag from network drivers
authorJavier Martinez Canillas <martinez.javier@gmail.com>
Mon, 28 Mar 2011 16:27:31 +0000 (16:27 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 31 Mar 2011 05:28:14 +0000 (22:28 -0700)
The IRQF_SAMPLE_RANDOM flag is marked as deprecated and will be removed.

Every input point to the kernel's entropy pool have to better document the
type of entropy source it is.

drivers/char/random.c now implements a set of interfaces that can be used for
devices to collect enviromental noise. IRQF_SAMPLE_RANDOM will be replaced
with these add_*_randomness exported functions.

Network drivers are not a good source of entropy. They use as a source of
entropy essentially a remote host. Which means that the source of entropy can
be potentially controlled by an attacker. Also, with heavy workloads the
entropy decreases due to less hardware interrupts happening thanks to irq
mitigation and NAPI.

If a system relies in its network interface as a entropy source it has a false
sense of security. Systems that don't have devices whose drivers are good
sources of entropy, should either use a hardware random number generator or
feed the kernel's entropy pool from userspace using other sources of entropy
such as EGD, video_entropyd, timer_entropyd and audio-entropyd.

Signed-off-by: Javier Martinez Canillas <martinez.javier@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/atlx/atl1.c
drivers/net/bcm63xx_enet.c
drivers/net/cris/eth_v10.c
drivers/net/ibmlana.c
drivers/net/macb.c
drivers/net/netxen/netxen_nic_main.c
drivers/net/niu.c
drivers/net/qla3xxx.c
drivers/net/tg3.c
drivers/net/xen-netfront.c

index 67f40b9c16edb0a15f70f3af6d0efbf57a55c56b..e973d056dc8fdb545cad0454541ef992b0bb4303 100644 (file)
@@ -2572,7 +2572,7 @@ static s32 atl1_up(struct atl1_adapter *adapter)
 {
        struct net_device *netdev = adapter->netdev;
        int err;
-       int irq_flags = IRQF_SAMPLE_RANDOM;
+       int irq_flags = 0;
 
        /* hardware has been reset, we need to reload some things */
        atlx_set_multi(netdev);
index e94a966af4186bb4db195547ac7ddc7ac957ea1f..2af413fbfb0e0369cc9311a19dafa2689b0fcc2f 100644 (file)
@@ -839,8 +839,8 @@ static int bcm_enet_open(struct net_device *dev)
        if (ret)
                goto out_phy_disconnect;
 
-       ret = request_irq(priv->irq_rx, bcm_enet_isr_dma,
-                         IRQF_SAMPLE_RANDOM | IRQF_DISABLED, dev->name, dev);
+       ret = request_irq(priv->irq_rx, bcm_enet_isr_dma, IRQF_DISABLED,
+                         dev->name, dev);
        if (ret)
                goto out_freeirq;
 
index 80c2feeefec5542266a4444c341a864c8a905cf9..e759d74edd016978c7b63985814cc9ac7089b5c9 100644 (file)
@@ -491,8 +491,8 @@ e100_open(struct net_device *dev)
 
        /* allocate the irq corresponding to the receiving DMA */
 
-       if (request_irq(NETWORK_DMA_RX_IRQ_NBR, e100rxtx_interrupt,
-                       IRQF_SAMPLE_RANDOM, cardname, (void *)dev)) {
+       if (request_irq(NETWORK_DMA_RX_IRQ_NBR, e100rxtx_interrupt, 0, cardname,
+                       (void *)dev)) {
                goto grace_exit0;
        }
 
index 94d9969ec0bbfa697c8d2e2487d58fcd032e51aa..f872f966927aecdc5c463b15a3662f932ec2b31f 100644 (file)
@@ -782,7 +782,8 @@ static int ibmlana_open(struct net_device *dev)
 
        /* register resources - only necessary for IRQ */
 
-       result = request_irq(priv->realirq, irq_handler, IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, dev);
+       result = request_irq(priv->realirq, irq_handler, IRQF_SHARED,
+                            dev->name, dev);
        if (result != 0) {
                printk(KERN_ERR "%s: failed to register irq %d\n", dev->name, dev->irq);
                return result;
index 79ccb54ab00c064716e068a1a2b175c03b138252..2cb4e792f871599fa5584a6e8d056afa502f8d9e 100644 (file)
@@ -1171,8 +1171,7 @@ static int __init macb_probe(struct platform_device *pdev)
        }
 
        dev->irq = platform_get_irq(pdev, 0);
-       err = request_irq(dev->irq, macb_interrupt, IRQF_SAMPLE_RANDOM,
-                         dev->name, dev);
+       err = request_irq(dev->irq, macb_interrupt, 0, dev->name, dev);
        if (err) {
                printk(KERN_ERR
                       "%s: Unable to request IRQ %d (error %d)\n",
index 83348dc4b184c5f8afbafc892b0c91dccd0dce13..933671556c153c20e741b6a4a5ce2e00cf127d39 100644 (file)
@@ -905,7 +905,7 @@ netxen_nic_request_irq(struct netxen_adapter *adapter)
        struct nx_host_sds_ring *sds_ring;
        int err, ring;
 
-       unsigned long flags = IRQF_SAMPLE_RANDOM;
+       unsigned long flags = 0;
        struct net_device *netdev = adapter->netdev;
        struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
 
index 32678b6c6b3997e3c408e754a3e8ec7b358fd752..681a42ca5c51079944febd92d110d8ffdc4c5887 100644 (file)
@@ -6071,8 +6071,7 @@ static int niu_request_irq(struct niu *np)
        for (i = 0; i < np->num_ldg; i++) {
                struct niu_ldg *lp = &np->ldg[i];
 
-               err = request_irq(lp->irq, niu_interrupt,
-                                 IRQF_SHARED | IRQF_SAMPLE_RANDOM,
+               err = request_irq(lp->irq, niu_interrupt, IRQF_SHARED,
                                  np->irq_name[i], lp);
                if (err)
                        goto out_free_irqs;
index 348b4f1367c90ffda7d1c1922b6b37962b1b73a4..f3f737b9124847e96a998ba4ac1d58ea94cb0c96 100644 (file)
@@ -3468,7 +3468,7 @@ static int ql_adapter_up(struct ql3_adapter *qdev)
 {
        struct net_device *ndev = qdev->ndev;
        int err;
-       unsigned long irq_flags = IRQF_SAMPLE_RANDOM | IRQF_SHARED;
+       unsigned long irq_flags = IRQF_SHARED;
        unsigned long hw_flags;
 
        if (ql_alloc_mem_resources(qdev)) {
index 73c942d85f074fde4eaaf5cb7ab5f540fa4d25cd..b7e03a6ebf250bef05557291b303b38f1ecf0980 100644 (file)
@@ -8839,12 +8839,12 @@ static int tg3_request_irq(struct tg3 *tp, int irq_num)
                fn = tg3_msi;
                if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI)
                        fn = tg3_msi_1shot;
-               flags = IRQF_SAMPLE_RANDOM;
+               flags = 0;
        } else {
                fn = tg3_interrupt;
                if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
                        fn = tg3_interrupt_tagged;
-               flags = IRQF_SHARED | IRQF_SAMPLE_RANDOM;
+               flags = IRQF_SHARED;
        }
 
        return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
index 5c8d9c385be0f05ffedc1bdceab8cb090a8749c9..c06f5a09b26377606d39aadb0ac8461a5fef3e21 100644 (file)
@@ -1416,8 +1416,7 @@ static int setup_netfront(struct xenbus_device *dev, struct netfront_info *info)
                goto fail;
 
        err = bind_evtchn_to_irqhandler(info->evtchn, xennet_interrupt,
-                                       IRQF_SAMPLE_RANDOM, netdev->name,
-                                       netdev);
+                                       0, netdev->name, netdev);
        if (err < 0)
                goto fail;
        netdev->irq = err;