From 5e9aaddf3ac9f363465f08cc7987f7fc18b4e802 Mon Sep 17 00:00:00 2001 From: Simon Wunderlich Date: Fri, 19 Feb 2010 16:18:05 +0100 Subject: [PATCH] --- yaml --- r: 186803 b: refs/heads/master c: eb50081d8fb76d5de9d65628d7f41977ece7044b h: refs/heads/master i: 186801: 72e23f0c33a0a8cce10ebaa406d68536b4866dd3 186799: 7ccd54747ffbd7e647778c8bc79297c61a656597 v: v3 --- [refs] | 2 +- trunk/drivers/staging/batman-adv/device.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 98425a1d6839..dfe10576464b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0fce64362d4f2144586e3ffcff6f259bf8abc2f8 +refs/heads/master: eb50081d8fb76d5de9d65628d7f41977ece7044b diff --git a/trunk/drivers/staging/batman-adv/device.c b/trunk/drivers/staging/batman-adv/device.c index a3e74296abfd..451898cd9ecb 100644 --- a/trunk/drivers/staging/batman-adv/device.c +++ b/trunk/drivers/staging/batman-adv/device.c @@ -25,6 +25,7 @@ #include "send.h" #include "types.h" #include "hash.h" +#include "hard-interface.h" static struct class *batman_class; @@ -206,6 +207,7 @@ ssize_t bat_device_write(struct file *file, const char __user *buff, struct icmp_packet icmp_packet; struct orig_node *orig_node; struct batman_if *batman_if; + uint8_t dstaddr[ETH_ALEN]; unsigned long flags; if (len < sizeof(struct icmp_packet)) { @@ -251,9 +253,15 @@ ssize_t bat_device_write(struct file *file, const char __user *buff, goto unlock; batman_if = orig_node->batman_if; + memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); + + spin_unlock_irqrestore(&orig_hash_lock, flags); if (!batman_if) - goto unlock; + goto dst_unreach; + + if (batman_if->if_active != IF_ACTIVE) + goto dst_unreach; memcpy(icmp_packet.orig, batman_if->net_dev->dev_addr, @@ -261,9 +269,8 @@ ssize_t bat_device_write(struct file *file, const char __user *buff, send_raw_packet((unsigned char *)&icmp_packet, sizeof(struct icmp_packet), - batman_if, orig_node->router->addr); + batman_if, dstaddr); - spin_unlock_irqrestore(&orig_hash_lock, flags); goto out; unlock: