diff options
| author | Joonwoo Park <joonwpark81@gmail.com> | 2008-04-01 00:02:47 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-04-01 00:02:47 -0400 |
| commit | f83f1768f833cb45bc93429fdc552252a4f55ac3 (patch) | |
| tree | 15de7d2df2fc3a35e0a6b933bb37aefcba2cc3ef /include | |
| parent | b50660f1fe4ebd6129064e4fba0bd882b60c2425 (diff) | |
[LLC]: skb allocation size for responses
Allocate the skb for llc responses with the received packet size by
using the size adjustable llc_frame_alloc.
Don't allocate useless extra payload.
Cleanup magic numbers.
So, this fixes oops.
Reported by Jim Westfall:
kernel: skb_over_panic: text:c0541fc7 len:1000 put:997 head:c166ac00 data:c166ac2f tail:0xc166b017 end:0xc166ac80 dev:eth0
kernel: ------------[ cut here ]------------
kernel: kernel BUG at net/core/skbuff.c:95!
Signed-off-by: Joonwoo Park <joonwpark81@gmail.com>
Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/llc_pdu.h | 4 | ||||
| -rw-r--r-- | include/net/llc_sap.h | 7 |
2 files changed, 7 insertions, 4 deletions
diff --git a/include/net/llc_pdu.h b/include/net/llc_pdu.h index 4a8f58b17e43..75b8e2968c9b 100644 --- a/include/net/llc_pdu.h +++ b/include/net/llc_pdu.h | |||
| @@ -381,7 +381,7 @@ static inline void llc_pdu_init_as_xid_cmd(struct sk_buff *skb, | |||
| 381 | xid_info->fmt_id = LLC_XID_FMT_ID; /* 0x81 */ | 381 | xid_info->fmt_id = LLC_XID_FMT_ID; /* 0x81 */ |
| 382 | xid_info->type = svcs_supported; | 382 | xid_info->type = svcs_supported; |
| 383 | xid_info->rw = rx_window << 1; /* size of receive window */ | 383 | xid_info->rw = rx_window << 1; /* size of receive window */ |
| 384 | skb_put(skb, 3); | 384 | skb_put(skb, sizeof(struct llc_xid_info)); |
| 385 | } | 385 | } |
| 386 | 386 | ||
| 387 | /** | 387 | /** |
| @@ -406,7 +406,7 @@ static inline void llc_pdu_init_as_xid_rsp(struct sk_buff *skb, | |||
| 406 | xid_info->fmt_id = LLC_XID_FMT_ID; | 406 | xid_info->fmt_id = LLC_XID_FMT_ID; |
| 407 | xid_info->type = svcs_supported; | 407 | xid_info->type = svcs_supported; |
| 408 | xid_info->rw = rx_window << 1; | 408 | xid_info->rw = rx_window << 1; |
| 409 | skb_put(skb, 3); | 409 | skb_put(skb, sizeof(struct llc_xid_info)); |
| 410 | } | 410 | } |
| 411 | 411 | ||
| 412 | /* LLC Type 2 FRMR response information field format */ | 412 | /* LLC Type 2 FRMR response information field format */ |
diff --git a/include/net/llc_sap.h b/include/net/llc_sap.h index 2c56dbece729..ed25bec2f648 100644 --- a/include/net/llc_sap.h +++ b/include/net/llc_sap.h | |||
| @@ -1,5 +1,8 @@ | |||
| 1 | #ifndef LLC_SAP_H | 1 | #ifndef LLC_SAP_H |
| 2 | #define LLC_SAP_H | 2 | #define LLC_SAP_H |
| 3 | |||
| 4 | #include <asm/types.h> | ||
| 5 | |||
| 3 | /* | 6 | /* |
| 4 | * Copyright (c) 1997 by Procom Technology,Inc. | 7 | * Copyright (c) 1997 by Procom Technology,Inc. |
| 5 | * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> | 8 | * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> |
| @@ -19,8 +22,8 @@ struct sock; | |||
| 19 | extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb); | 22 | extern void llc_sap_rtn_pdu(struct llc_sap *sap, struct sk_buff *skb); |
| 20 | extern void llc_save_primitive(struct sock *sk, struct sk_buff* skb, | 23 | extern void llc_save_primitive(struct sock *sk, struct sk_buff* skb, |
| 21 | unsigned char prim); | 24 | unsigned char prim); |
| 22 | extern struct sk_buff *llc_alloc_frame(struct sock *sk, | 25 | extern struct sk_buff *llc_alloc_frame(struct sock *sk, struct net_device *dev, |
| 23 | struct net_device *dev); | 26 | u8 type, u32 data_size); |
| 24 | 27 | ||
| 25 | extern void llc_build_and_send_test_pkt(struct llc_sap *sap, | 28 | extern void llc_build_and_send_test_pkt(struct llc_sap *sap, |
| 26 | struct sk_buff *skb, | 29 | struct sk_buff *skb, |
