X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fpppoe.c;h=0adee733b76121126c4cbfcf0cbed8f9aadbc087;hb=6b655529c3d817ed1b69cf2dd29e2c3ce5148a2b;hp=475dc930380f63b6a1b0fd52b2532b43354798c5;hpb=1b9a3917366028cc451a98dd22e3bcd537d4e5c1;p=powerpc.git diff --git a/drivers/net/pppoe.c b/drivers/net/pppoe.c index 475dc93038..0adee733b7 100644 --- a/drivers/net/pppoe.c +++ b/drivers/net/pppoe.c @@ -386,13 +386,13 @@ static int pppoe_rcv(struct sk_buff *skb, if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr))) goto drop; - if (!(skb = skb_share_check(skb, GFP_ATOMIC))) + if (!(skb = skb_share_check(skb, GFP_ATOMIC))) goto out; ph = (struct pppoe_hdr *) skb->nh.raw; po = get_item((unsigned long) ph->sid, eth_hdr(skb)->h_source); - if (po != NULL) + if (po != NULL) return sk_receive_skb(sk_pppox(po), skb); drop: kfree_skb(skb); @@ -418,7 +418,7 @@ static int pppoe_disc_rcv(struct sk_buff *skb, if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr))) goto abort; - if (!(skb = skb_share_check(skb, GFP_ATOMIC))) + if (!(skb = skb_share_check(skb, GFP_ATOMIC))) goto out; ph = (struct pppoe_hdr *) skb->nh.raw; @@ -600,6 +600,7 @@ static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, po->chan.hdrlen = (sizeof(struct pppoe_hdr) + dev->hard_header_len); + po->chan.mtu = dev->mtu - sizeof(struct pppoe_hdr); po->chan.private = sk; po->chan.ops = &pppoe_chan_ops; @@ -745,7 +746,7 @@ static int pppoe_ioctl(struct socket *sock, unsigned int cmd, } -static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock, +static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t total_len) { struct sk_buff *skb = NULL; @@ -861,6 +862,9 @@ static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb) * give dev_queue_xmit something it can free. */ skb2 = skb_clone(skb, GFP_ATOMIC); + + if (skb2 == NULL) + goto abort; } ph = (struct pppoe_hdr *) skb_push(skb2, sizeof(struct pppoe_hdr)); @@ -904,8 +908,8 @@ static int pppoe_xmit(struct ppp_channel *chan, struct sk_buff *skb) } -static struct ppp_channel_ops pppoe_chan_ops = { - .start_xmit = pppoe_xmit, +static struct ppp_channel_ops pppoe_chan_ops = { + .start_xmit = pppoe_xmit, }; static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock, @@ -1007,7 +1011,7 @@ static void *pppoe_seq_next(struct seq_file *seq, void *v, loff_t *pos) goto out; } po = v; - if (po->next) + if (po->next) po = po->next; else { int hash = hash_item(po->pppoe_pa.sid, po->pppoe_pa.remote); @@ -1103,7 +1107,7 @@ static int __init pppoe_init(void) err = pppoe_proc_init(); if (err) goto out_unregister_pppox_proto; - + dev_add_pack(&pppoes_ptype); dev_add_pack(&pppoed_ptype); register_netdevice_notifier(&pppoe_notifier);