socket.c (7ae9fb1b7ecbb5d85d07857943f677fd1a559b18) | socket.c (e1d001fa5b477c4da46a29be1fcece91db7c7c6f) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * IEEE802154.4 socket interface 4 * 5 * Copyright 2007, 2008 Siemens AG 6 * 7 * Written by: 8 * Sergey Lapin <slapin@ossfans.org> --- 148 unchanged lines hidden (view full) --- 157 switch (cmd) { 158 case SIOCGIFADDR: 159 case SIOCSIFADDR: 160 return ieee802154_dev_ioctl(sk, (struct ifreq __user *)arg, 161 cmd); 162 default: 163 if (!sk->sk_prot->ioctl) 164 return -ENOIOCTLCMD; | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * IEEE802154.4 socket interface 4 * 5 * Copyright 2007, 2008 Siemens AG 6 * 7 * Written by: 8 * Sergey Lapin <slapin@ossfans.org> --- 148 unchanged lines hidden (view full) --- 157 switch (cmd) { 158 case SIOCGIFADDR: 159 case SIOCSIFADDR: 160 return ieee802154_dev_ioctl(sk, (struct ifreq __user *)arg, 161 cmd); 162 default: 163 if (!sk->sk_prot->ioctl) 164 return -ENOIOCTLCMD; |
165 return sk->sk_prot->ioctl(sk, cmd, arg); | 165 return sk_ioctl(sk, cmd, (void __user *)arg); |
166 } 167} 168 169/* RAW Sockets (802.15.4 created in userspace) */ 170static HLIST_HEAD(raw_head); 171static DEFINE_RWLOCK(raw_lock); 172 173static int raw_hash(struct sock *sk) --- 352 unchanged lines hidden (view full) --- 526out_put: 527 dev_put(dev); 528out: 529 release_sock(sk); 530 531 return err; 532} 533 | 166 } 167} 168 169/* RAW Sockets (802.15.4 created in userspace) */ 170static HLIST_HEAD(raw_head); 171static DEFINE_RWLOCK(raw_lock); 172 173static int raw_hash(struct sock *sk) --- 352 unchanged lines hidden (view full) --- 526out_put: 527 dev_put(dev); 528out: 529 release_sock(sk); 530 531 return err; 532} 533 |
534static int dgram_ioctl(struct sock *sk, int cmd, unsigned long arg) | 534static int dgram_ioctl(struct sock *sk, int cmd, int *karg) |
535{ 536 switch (cmd) { 537 case SIOCOUTQ: 538 { | 535{ 536 switch (cmd) { 537 case SIOCOUTQ: 538 { |
539 int amount = sk_wmem_alloc_get(sk); | 539 *karg = sk_wmem_alloc_get(sk); |
540 | 540 |
541 return put_user(amount, (int __user *)arg); | 541 return 0; |
542 } 543 544 case SIOCINQ: 545 { 546 struct sk_buff *skb; | 542 } 543 544 case SIOCINQ: 545 { 546 struct sk_buff *skb; |
547 unsigned long amount; | |
548 | 547 |
549 amount = 0; | 548 *karg = 0; |
550 spin_lock_bh(&sk->sk_receive_queue.lock); 551 skb = skb_peek(&sk->sk_receive_queue); 552 if (skb) { 553 /* We will only return the amount 554 * of this packet since that is all 555 * that will be read. 556 */ | 549 spin_lock_bh(&sk->sk_receive_queue.lock); 550 skb = skb_peek(&sk->sk_receive_queue); 551 if (skb) { 552 /* We will only return the amount 553 * of this packet since that is all 554 * that will be read. 555 */ |
557 amount = skb->len - ieee802154_hdr_length(skb); | 556 *karg = skb->len - ieee802154_hdr_length(skb); |
558 } 559 spin_unlock_bh(&sk->sk_receive_queue.lock); | 557 } 558 spin_unlock_bh(&sk->sk_receive_queue.lock); |
560 return put_user(amount, (int __user *)arg); | 559 return 0; |
561 } 562 } 563 564 return -ENOIOCTLCMD; 565} 566 567/* FIXME: autobind */ 568static int dgram_connect(struct sock *sk, struct sockaddr *uaddr, --- 575 unchanged lines hidden --- | 560 } 561 } 562 563 return -ENOIOCTLCMD; 564} 565 566/* FIXME: autobind */ 567static int dgram_connect(struct sock *sk, struct sockaddr *uaddr, --- 575 unchanged lines hidden --- |