From patchwork Fri Aug 20 15:32:38 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sven Eckelmann X-Patchwork-Id: 318 Return-Path: Received: from mail.gmx.net (mailout-de.gmx.net [213.165.64.22]) by open-mesh.net (Postfix) with SMTP id 1C391154510 for ; Fri, 20 Aug 2010 17:32:44 +0200 (CEST) Received: (qmail invoked by alias); 20 Aug 2010 15:32:43 -0000 Received: from i59F6A0EB.versanet.de (EHLO sven-desktop.lazhur.ath.cx) [89.246.160.235] by mail.gmx.net (mp052) with SMTP; 20 Aug 2010 17:32:43 +0200 X-Authenticated: #15668376 X-Provags-ID: V01U2FsdGVkX1/+h0J89i7+m2PqrkPI0g38NIYoSCAq0pfLqdT7Pa sm5AxRQRyJ1laW From: Sven Eckelmann To: b.a.t.m.a.n@lists.open-mesh.org Date: Fri, 20 Aug 2010 17:32:38 +0200 Message-Id: <1282318358-16121-1-git-send-email-sven.eckelmann@gmx.de> X-Mailer: git-send-email 1.7.1 X-Y-GMX-Trusted: 0 Subject: [B.A.T.M.A.N.] [PATCH] batman-adv: Don't write in not allocated packet_buff X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.11 Precedence: list Reply-To: The list for a Better Approach To Mobile Ad-hoc Networking List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Aug 2010 15:32:44 -0000 Each net_device in a system will automatically managed as a possible batman_if and holds different informations like a buffer with a prepared originator messages. To reduce the memory usage, the packet_buff will only be allocated when the interface is really added/enabled for batman-adv. The function to update the hw address information inside the packet_buff just assumes that the packet_buff is always initialised and thus the kernel will just oops when we try to change the hw address of a not already fully enabled interface. We must always check if the packet_buff is allocated before we try to change information inside of it. Reported-by: Tim Glaremin Reported-by: Lemonde Signed-off-by: Sven Eckelmann Cc: stable Signed-off-by: Sven Eckelmann --- batman-adv/hard-interface.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/batman-adv/hard-interface.c b/batman-adv/hard-interface.c index eb26026..9d0a47c 100644 --- a/batman-adv/hard-interface.c +++ b/batman-adv/hard-interface.c @@ -138,6 +138,9 @@ static bool hardif_is_iface_up(struct batman_if *batman_if) static void update_mac_addresses(struct batman_if *batman_if) { + if (!batman_if || !batman_if->packet_buff) + return; + addr_to_string(batman_if->addr_str, batman_if->net_dev->dev_addr); memcpy(((struct batman_packet *)(batman_if->packet_buff))->orig, @@ -397,6 +400,7 @@ static struct batman_if *hardif_add_interface(struct net_device *net_dev) batman_if->net_dev = net_dev; batman_if->soft_iface = NULL; batman_if->if_status = IF_NOT_IN_USE; + batman_if->packet_buff = NULL; INIT_LIST_HEAD(&batman_if->list); check_known_mac_addr(batman_if->net_dev->dev_addr);