diff options
-rw-r--r-- | net/core/skbuff.c | 48 |
1 files changed, 19 insertions, 29 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 6114c1143564..8731c39b7a54 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -104,47 +104,37 @@ static const struct pipe_buf_operations sock_pipe_buf_ops = { | |||
104 | .get = sock_pipe_buf_get, | 104 | .get = sock_pipe_buf_get, |
105 | }; | 105 | }; |
106 | 106 | ||
107 | /* | ||
108 | * Keep out-of-line to prevent kernel bloat. | ||
109 | * __builtin_return_address is not used because it is not always | ||
110 | * reliable. | ||
111 | */ | ||
112 | |||
113 | /** | 107 | /** |
114 | * skb_over_panic - private function | 108 | * skb_panic - private function for out-of-line support |
115 | * @skb: buffer | 109 | * @skb: buffer |
116 | * @sz: size | 110 | * @sz: size |
117 | * @here: address | 111 | * @addr: address |
118 | * | 112 | * @panic: skb_over_panic or skb_under_panic |
119 | * Out of line support code for skb_put(). Not user callable. | 113 | * |
114 | * Out-of-line support for skb_put() and skb_push(). | ||
115 | * Called via the wrapper skb_over_panic() or skb_under_panic(). | ||
116 | * Keep out of line to prevent kernel bloat. | ||
117 | * __builtin_return_address is not used because it is not always reliable. | ||
120 | */ | 118 | */ |
121 | static void skb_over_panic(struct sk_buff *skb, int sz, void *here) | 119 | static void skb_panic(struct sk_buff *skb, unsigned int sz, void *addr, |
120 | const char panic[]) | ||
122 | { | 121 | { |
123 | pr_emerg("%s: text:%p len:%d put:%d head:%p data:%p tail:%#lx end:%#lx dev:%s\n", | 122 | pr_emerg("%s: text:%p len:%d put:%d head:%p data:%p tail:%#lx end:%#lx dev:%s\n", |
124 | __func__, here, skb->len, sz, skb->head, skb->data, | 123 | panic, addr, skb->len, sz, skb->head, skb->data, |
125 | (unsigned long)skb->tail, (unsigned long)skb->end, | 124 | (unsigned long)skb->tail, (unsigned long)skb->end, |
126 | skb->dev ? skb->dev->name : "<NULL>"); | 125 | skb->dev ? skb->dev->name : "<NULL>"); |
127 | BUG(); | 126 | BUG(); |
128 | } | 127 | } |
129 | 128 | ||
130 | /** | 129 | static void skb_over_panic(struct sk_buff *skb, unsigned int sz, void *addr) |
131 | * skb_under_panic - private function | ||
132 | * @skb: buffer | ||
133 | * @sz: size | ||
134 | * @here: address | ||
135 | * | ||
136 | * Out of line support code for skb_push(). Not user callable. | ||
137 | */ | ||
138 | |||
139 | static void skb_under_panic(struct sk_buff *skb, int sz, void *here) | ||
140 | { | 130 | { |
141 | pr_emerg("%s: text:%p len:%d put:%d head:%p data:%p tail:%#lx end:%#lx dev:%s\n", | 131 | skb_panic(skb, sz, addr, __func__); |
142 | __func__, here, skb->len, sz, skb->head, skb->data, | ||
143 | (unsigned long)skb->tail, (unsigned long)skb->end, | ||
144 | skb->dev ? skb->dev->name : "<NULL>"); | ||
145 | BUG(); | ||
146 | } | 132 | } |
147 | 133 | ||
134 | static void skb_under_panic(struct sk_buff *skb, unsigned int sz, void *addr) | ||
135 | { | ||
136 | skb_panic(skb, sz, addr, __func__); | ||
137 | } | ||
148 | 138 | ||
149 | /* | 139 | /* |
150 | * kmalloc_reserve is a wrapper around kmalloc_node_track_caller that tells | 140 | * kmalloc_reserve is a wrapper around kmalloc_node_track_caller that tells |