From patchwork Fri Oct 21 12:01:35 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 120989 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id B9A36B6F86 for ; Fri, 21 Oct 2011 23:01:45 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754588Ab1JUMBj (ORCPT ); Fri, 21 Oct 2011 08:01:39 -0400 Received: from mail-ww0-f42.google.com ([74.125.82.42]:63509 "EHLO mail-ww0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754456Ab1JUMBi (ORCPT ); Fri, 21 Oct 2011 08:01:38 -0400 Received: by wwn22 with SMTP id 22so775717wwn.1 for ; Fri, 21 Oct 2011 05:01:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=message-id:subject:from:to:cc:date:content-type:x-mailer :content-transfer-encoding:mime-version; bh=EaCN1gKxgwmoIQeSCne8QEC8KUqcJxVpTvNfnRQ12Rk=; b=vOg24VikOlmKbcagNSU2FPvayU53lHqNvRQWQKQw2NI5nDzExnJK/yW/IBDJFMN9HO ns87dld1S68ZSODOTr91ihIdVcammjAE7odwQB53U6WbnaZ5Qpjp9fLUaOwt8e4/Ec9Q Icp501mVB+dM8uMnSh7WKavykv+ukLAGvfjI0= Received: by 10.227.38.89 with SMTP id a25mr5542245wbe.70.1319198497591; Fri, 21 Oct 2011 05:01:37 -0700 (PDT) Received: from [10.150.51.213] (gw0.net.jmsp.net. [212.23.165.14]) by mx.google.com with ESMTPS id es5sm21367307wbb.11.2011.10.21.05.01.36 (version=SSLv3 cipher=OTHER); Fri, 21 Oct 2011 05:01:36 -0700 (PDT) Message-ID: <1319198495.2338.34.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC> Subject: [PATCH net-next] tcp: md5: dont write skb head in tcp_md5_hash_header() From: Eric Dumazet To: David Miller Cc: netdev Date: Fri, 21 Oct 2011 14:01:35 +0200 X-Mailer: Evolution 3.2.0- Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org tcp_md5_hash_header() writes into skb header a temporary zero value, this might confuse other users of this area. Since tcphdr is small (20 bytes), copy it in a temporary variable and make the change in the copy. Signed-off-by: Eric Dumazet --- include/net/tcp.h | 2 +- net/ipv4/tcp.c | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/include/net/tcp.h b/include/net/tcp.h index 3edef0b..910cc29 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -1209,7 +1209,7 @@ extern void tcp_free_md5sig_pool(void); extern struct tcp_md5sig_pool *tcp_get_md5sig_pool(void); extern void tcp_put_md5sig_pool(void); -extern int tcp_md5_hash_header(struct tcp_md5sig_pool *, struct tcphdr *); +extern int tcp_md5_hash_header(struct tcp_md5sig_pool *, const struct tcphdr *); extern int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *, const struct sk_buff *, unsigned header_len); extern int tcp_md5_hash_key(struct tcp_md5sig_pool *hp, diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 704adad..eefc61e 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2994,17 +2994,19 @@ void tcp_put_md5sig_pool(void) EXPORT_SYMBOL(tcp_put_md5sig_pool); int tcp_md5_hash_header(struct tcp_md5sig_pool *hp, - struct tcphdr *th) + const struct tcphdr *th) { struct scatterlist sg; + struct tcphdr hdr; int err; - __sum16 old_checksum = th->check; - th->check = 0; + /* We are not allowed to change tcphdr, make a local copy */ + memcpy(&hdr, th, sizeof(hdr)); + hdr.check = 0; + /* options aren't included in the hash */ - sg_init_one(&sg, th, sizeof(struct tcphdr)); - err = crypto_hash_update(&hp->md5_desc, &sg, sizeof(struct tcphdr)); - th->check = old_checksum; + sg_init_one(&sg, &hdr, sizeof(hdr)); + err = crypto_hash_update(&hp->md5_desc, &sg, sizeof(hdr)); return err; } EXPORT_SYMBOL(tcp_md5_hash_header);