diff options
Diffstat (limited to 'target/linux/uml/patches-3.10/102-pseudo-random-mac.patch')
-rw-r--r-- | target/linux/uml/patches-3.10/102-pseudo-random-mac.patch | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/target/linux/uml/patches-3.10/102-pseudo-random-mac.patch b/target/linux/uml/patches-3.10/102-pseudo-random-mac.patch deleted file mode 100644 index 6f790f9..0000000 --- a/target/linux/uml/patches-3.10/102-pseudo-random-mac.patch +++ /dev/null @@ -1,129 +0,0 @@ -=============================================================================== - -This patch makes MAC addresses of network interfaces predictable. In -particular, it adds a small routine that computes MAC addresses of based on -a SHA1 hash of the virtual machine name and interface ID. - -TECHNICAL INFORMATION: - -Applies to vanilla kernel 3.9.4. - -=============================================================================== -diff -aur linux-3.9.4-orig/arch/um/Kconfig.net linux-3.9.4/arch/um/Kconfig.net ---- linux-3.9.4-orig/arch/um/Kconfig.net 2013-05-24 21:45:59.000000000 +0300 -+++ linux-3.9.4/arch/um/Kconfig.net 2013-06-11 13:07:06.363999999 +0300 -@@ -21,6 +21,19 @@ - enable at least one of the following transport options to actually - make use of UML networking. - -+config UML_NET_RANDOM_MAC -+ bool "Use random MAC addresses for network interfaces" -+ default n -+ depends on UML_NET -+ help -+ Virtual network devices inside a User-Mode Linux instance must be -+ assigned a MAC (Ethernet) address. If none is specified on the UML -+ command line, one must be automatically computed. If this option is -+ enabled, a randomly generated address is used. Otherwise, if this -+ option is disabled, the address is generated from a SHA1 hash of -+ the umid of the UML instance and the interface name. The latter choice -+ is useful to make MAC addresses predictable. -+ - config UML_NET_ETHERTAP - bool "Ethertap transport" - depends on UML_NET -diff -aur linux-3.9.4-orig/arch/um/drivers/net_kern.c linux-3.9.4/arch/um/drivers/net_kern.c ---- linux-3.9.4-orig/arch/um/drivers/net_kern.c 2013-05-24 21:45:59.000000000 +0300 -+++ linux-3.9.4/arch/um/drivers/net_kern.c 2013-06-11 13:09:03.452000001 +0300 -@@ -25,6 +25,13 @@ - #include <net_kern.h> - #include <net_user.h> - -+#include <crypto/sha.h> -+#include <linux/string.h> -+#include <linux/crypto.h> -+#include <linux/err.h> -+#include <linux/scatterlist.h> -+#include "os.h" -+ - #define DRIVER_NAME "uml-netdev" - - static DEFINE_SPINLOCK(opened_lock); -@@ -295,11 +302,47 @@ - #endif - } - -+#ifndef CONFIG_UML_NET_RANDOM_MAC -+ -+/* Compute a SHA1 hash of the UML instance's id and -+ * * an interface name. */ -+static int compute_hash(const char *umid, const char *ifname, char *hash) { -+ char vmif[1024]; -+ struct scatterlist sg; -+ struct crypto_hash *tfm; -+ struct hash_desc desc; -+ -+ strcpy (vmif, umid); -+ strcat (vmif, ifname); -+ -+ tfm = crypto_alloc_hash("sha1", 0, CRYPTO_ALG_ASYNC); -+ if (IS_ERR(tfm)) -+ return 1; -+ -+ desc.tfm = tfm; -+ desc.flags = 0; -+ -+ sg_init_table(&sg, 1); -+ sg_set_buf(&sg, vmif, strlen(vmif)); -+ -+ if (crypto_hash_digest(&desc, &sg, strlen(vmif), hash)) { -+ crypto_free_hash(tfm); -+ return 1; -+ } -+ -+ crypto_free_hash(tfm); -+ -+ return 0; -+} -+ -+#endif -+ - static void setup_etheraddr(struct net_device *dev, char *str) - { - unsigned char *addr = dev->dev_addr; - char *end; - int i; -+ u8 hash[SHA1_DIGEST_SIZE]; - - if (str == NULL) - goto random; -@@ -340,9 +383,26 @@ - return; - - random: -+#ifdef CONFIG_UML_NET_RANDOM_MAC - printk(KERN_INFO - "Choosing a random ethernet address for device %s\n", dev->name); - eth_hw_addr_random(dev); -+#else -+ printk(KERN_INFO -+ "Computing a digest to use as ethernet address for device %s\n", dev->name); -+ if (compute_hash(get_umid(), dev->name, hash)) { -+ printk(KERN_WARNING -+ "Could not compute digest to use as ethernet address for device %s. " -+ "Using random address instead.\n", dev->name); -+ random_ether_addr(addr); -+ } -+ else { -+ for (i=0; i < 6; i++) -+ addr[i] = (hash[i] + hash[i+6]) % 0x100; -+ } -+ addr [0] &= 0xfe; /* clear multicast bit */ -+ addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ -+#endif - } - - static DEFINE_SPINLOCK(devices_lock); -Only in linux-3.9.4/arch/um/drivers: net_kern.c.orig -Only in linux-3.9.4/arch/um/drivers: net_kern.c.rej -Only in linux-3.9.4/arch/um/drivers: net_kern.c~ |