diff options
Diffstat (limited to 'net/atm/pppoatm.c')
-rw-r--r-- | net/atm/pppoatm.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/net/atm/pppoatm.c b/net/atm/pppoatm.c index 0af84cd4f65b..e49bb6d948a1 100644 --- a/net/atm/pppoatm.c +++ b/net/atm/pppoatm.c | |||
@@ -33,9 +33,12 @@ | |||
33 | * These hooks are not yet available in ppp_generic | 33 | * These hooks are not yet available in ppp_generic |
34 | */ | 34 | */ |
35 | 35 | ||
36 | #define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__ | ||
37 | |||
36 | #include <linux/module.h> | 38 | #include <linux/module.h> |
37 | #include <linux/init.h> | 39 | #include <linux/init.h> |
38 | #include <linux/skbuff.h> | 40 | #include <linux/skbuff.h> |
41 | #include <linux/slab.h> | ||
39 | #include <linux/atm.h> | 42 | #include <linux/atm.h> |
40 | #include <linux/atmdev.h> | 43 | #include <linux/atmdev.h> |
41 | #include <linux/capability.h> | 44 | #include <linux/capability.h> |
@@ -132,7 +135,7 @@ static void pppoatm_unassign_vcc(struct atm_vcc *atmvcc) | |||
132 | static void pppoatm_push(struct atm_vcc *atmvcc, struct sk_buff *skb) | 135 | static void pppoatm_push(struct atm_vcc *atmvcc, struct sk_buff *skb) |
133 | { | 136 | { |
134 | struct pppoatm_vcc *pvcc = atmvcc_to_pvcc(atmvcc); | 137 | struct pppoatm_vcc *pvcc = atmvcc_to_pvcc(atmvcc); |
135 | pr_debug("pppoatm push\n"); | 138 | pr_debug("\n"); |
136 | if (skb == NULL) { /* VCC was closed */ | 139 | if (skb == NULL) { /* VCC was closed */ |
137 | pr_debug("removing ATMPPP VCC %p\n", pvcc); | 140 | pr_debug("removing ATMPPP VCC %p\n", pvcc); |
138 | pppoatm_unassign_vcc(atmvcc); | 141 | pppoatm_unassign_vcc(atmvcc); |
@@ -165,17 +168,17 @@ static void pppoatm_push(struct atm_vcc *atmvcc, struct sk_buff *skb) | |||
165 | pvcc->chan.mtu += LLC_LEN; | 168 | pvcc->chan.mtu += LLC_LEN; |
166 | break; | 169 | break; |
167 | } | 170 | } |
168 | pr_debug("Couldn't autodetect yet " | 171 | pr_debug("Couldn't autodetect yet (skb: %02X %02X %02X %02X %02X %02X)\n", |
169 | "(skb: %02X %02X %02X %02X %02X %02X)\n", | 172 | skb->data[0], skb->data[1], skb->data[2], |
170 | skb->data[0], skb->data[1], skb->data[2], | 173 | skb->data[3], skb->data[4], skb->data[5]); |
171 | skb->data[3], skb->data[4], skb->data[5]); | ||
172 | goto error; | 174 | goto error; |
173 | case e_vc: | 175 | case e_vc: |
174 | break; | 176 | break; |
175 | } | 177 | } |
176 | ppp_input(&pvcc->chan, skb); | 178 | ppp_input(&pvcc->chan, skb); |
177 | return; | 179 | return; |
178 | error: | 180 | |
181 | error: | ||
179 | kfree_skb(skb); | 182 | kfree_skb(skb); |
180 | ppp_input_error(&pvcc->chan, 0); | 183 | ppp_input_error(&pvcc->chan, 0); |
181 | } | 184 | } |
@@ -194,7 +197,7 @@ static int pppoatm_send(struct ppp_channel *chan, struct sk_buff *skb) | |||
194 | { | 197 | { |
195 | struct pppoatm_vcc *pvcc = chan_to_pvcc(chan); | 198 | struct pppoatm_vcc *pvcc = chan_to_pvcc(chan); |
196 | ATM_SKB(skb)->vcc = pvcc->atmvcc; | 199 | ATM_SKB(skb)->vcc = pvcc->atmvcc; |
197 | pr_debug("pppoatm_send (skb=0x%p, vcc=0x%p)\n", skb, pvcc->atmvcc); | 200 | pr_debug("(skb=0x%p, vcc=0x%p)\n", skb, pvcc->atmvcc); |
198 | if (skb->data[0] == '\0' && (pvcc->flags & SC_COMP_PROT)) | 201 | if (skb->data[0] == '\0' && (pvcc->flags & SC_COMP_PROT)) |
199 | (void) skb_pull(skb, 1); | 202 | (void) skb_pull(skb, 1); |
200 | switch (pvcc->encaps) { /* LLC encapsulation needed */ | 203 | switch (pvcc->encaps) { /* LLC encapsulation needed */ |
@@ -208,7 +211,8 @@ static int pppoatm_send(struct ppp_channel *chan, struct sk_buff *skb) | |||
208 | goto nospace; | 211 | goto nospace; |
209 | } | 212 | } |
210 | kfree_skb(skb); | 213 | kfree_skb(skb); |
211 | if ((skb = n) == NULL) | 214 | skb = n; |
215 | if (skb == NULL) | ||
212 | return DROP_PACKET; | 216 | return DROP_PACKET; |
213 | } else if (!atm_may_send(pvcc->atmvcc, skb->truesize)) | 217 | } else if (!atm_may_send(pvcc->atmvcc, skb->truesize)) |
214 | goto nospace; | 218 | goto nospace; |
@@ -226,11 +230,11 @@ static int pppoatm_send(struct ppp_channel *chan, struct sk_buff *skb) | |||
226 | 230 | ||
227 | atomic_add(skb->truesize, &sk_atm(ATM_SKB(skb)->vcc)->sk_wmem_alloc); | 231 | atomic_add(skb->truesize, &sk_atm(ATM_SKB(skb)->vcc)->sk_wmem_alloc); |
228 | ATM_SKB(skb)->atm_options = ATM_SKB(skb)->vcc->atm_options; | 232 | ATM_SKB(skb)->atm_options = ATM_SKB(skb)->vcc->atm_options; |
229 | pr_debug("atm_skb(%p)->vcc(%p)->dev(%p)\n", skb, ATM_SKB(skb)->vcc, | 233 | pr_debug("atm_skb(%p)->vcc(%p)->dev(%p)\n", |
230 | ATM_SKB(skb)->vcc->dev); | 234 | skb, ATM_SKB(skb)->vcc, ATM_SKB(skb)->vcc->dev); |
231 | return ATM_SKB(skb)->vcc->send(ATM_SKB(skb)->vcc, skb) | 235 | return ATM_SKB(skb)->vcc->send(ATM_SKB(skb)->vcc, skb) |
232 | ? DROP_PACKET : 1; | 236 | ? DROP_PACKET : 1; |
233 | nospace: | 237 | nospace: |
234 | /* | 238 | /* |
235 | * We don't have space to send this SKB now, but we might have | 239 | * We don't have space to send this SKB now, but we might have |
236 | * already applied SC_COMP_PROT compression, so may need to undo | 240 | * already applied SC_COMP_PROT compression, so may need to undo |
@@ -289,7 +293,8 @@ static int pppoatm_assign_vcc(struct atm_vcc *atmvcc, void __user *arg) | |||
289 | (be.encaps == e_vc ? 0 : LLC_LEN); | 293 | (be.encaps == e_vc ? 0 : LLC_LEN); |
290 | pvcc->wakeup_tasklet = tasklet_proto; | 294 | pvcc->wakeup_tasklet = tasklet_proto; |
291 | pvcc->wakeup_tasklet.data = (unsigned long) &pvcc->chan; | 295 | pvcc->wakeup_tasklet.data = (unsigned long) &pvcc->chan; |
292 | if ((err = ppp_register_channel(&pvcc->chan)) != 0) { | 296 | err = ppp_register_channel(&pvcc->chan); |
297 | if (err != 0) { | ||
293 | kfree(pvcc); | 298 | kfree(pvcc); |
294 | return err; | 299 | return err; |
295 | } | 300 | } |