hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/net/atm/common.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /* net/atm/common.c - ATM sockets (common part for PVC and SVC) */
23
34 /* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
....@@ -176,18 +177,18 @@
176177
177178 set_bit(ATM_VF_CLOSE, &vcc->flags);
178179 clear_bit(ATM_VF_READY, &vcc->flags);
179
- if (vcc->dev) {
180
- if (vcc->dev->ops->close)
181
- vcc->dev->ops->close(vcc);
182
- if (vcc->push)
183
- vcc->push(vcc, NULL); /* atmarpd has no push */
184
- module_put(vcc->owner);
180
+ if (vcc->dev && vcc->dev->ops->close)
181
+ vcc->dev->ops->close(vcc);
182
+ if (vcc->push)
183
+ vcc->push(vcc, NULL); /* atmarpd has no push */
184
+ module_put(vcc->owner);
185185
186
- while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
187
- atm_return(vcc, skb->truesize);
188
- kfree_skb(skb);
189
- }
186
+ while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
187
+ atm_return(vcc, skb->truesize);
188
+ kfree_skb(skb);
189
+ }
190190
191
+ if (vcc->dev && vcc->dev->ops->owner) {
191192 module_put(vcc->dev->ops->owner);
192193 atm_dev_put(vcc->dev);
193194 }
....@@ -296,7 +297,7 @@
296297 break;
297298 default:
298299 pr_warn("AAL problems ... (%d)\n", aal);
299
- /* fall through */
300
+ fallthrough;
300301 case ATM_AAL5:
301302 max_sdu = ATM_MAX_AAL5_PDU;
302303 }
....@@ -416,7 +417,7 @@
416417 case ATM_NO_AAL:
417418 /* ATM_AAL5 is also used in the "0 for default" case */
418419 vcc->qos.aal = ATM_AAL5;
419
- /* fall through */
420
+ fallthrough;
420421 case ATM_AAL5:
421422 error = atm_init_aal5(vcc);
422423 vcc->stats = &dev->stats.aal5;
....@@ -744,7 +745,7 @@
744745 }
745746
746747 int vcc_setsockopt(struct socket *sock, int level, int optname,
747
- char __user *optval, unsigned int optlen)
748
+ sockptr_t optval, unsigned int optlen)
748749 {
749750 struct atm_vcc *vcc;
750751 unsigned long value;
....@@ -759,7 +760,7 @@
759760 {
760761 struct atm_qos qos;
761762
762
- if (copy_from_user(&qos, optval, sizeof(qos)))
763
+ if (copy_from_sockptr(&qos, optval, sizeof(qos)))
763764 return -EFAULT;
764765 error = check_qos(&qos);
765766 if (error)
....@@ -773,7 +774,7 @@
773774 return 0;
774775 }
775776 case SO_SETCLP:
776
- if (get_user(value, (unsigned long __user *)optval))
777
+ if (copy_from_sockptr(&value, optval, sizeof(value)))
777778 return -EFAULT;
778779 if (value)
779780 vcc->atm_options |= ATM_ATMOPT_CLP;
....@@ -781,13 +782,8 @@
781782 vcc->atm_options &= ~ATM_ATMOPT_CLP;
782783 return 0;
783784 default:
784
- if (level == SOL_SOCKET)
785
- return -EINVAL;
786
- break;
787
- }
788
- if (!vcc->dev || !vcc->dev->ops->setsockopt)
789785 return -EINVAL;
790
- return vcc->dev->ops->setsockopt(vcc, level, optname, optval, optlen);
786
+ }
791787 }
792788
793789 int vcc_getsockopt(struct socket *sock, int level, int optname,
....@@ -825,13 +821,8 @@
825821 return copy_to_user(optval, &pvc, sizeof(pvc)) ? -EFAULT : 0;
826822 }
827823 default:
828
- if (level == SOL_SOCKET)
829
- return -EINVAL;
830
- break;
831
- }
832
- if (!vcc->dev || !vcc->dev->ops->getsockopt)
833824 return -EINVAL;
834
- return vcc->dev->ops->getsockopt(vcc, level, optname, optval, len);
825
+ }
835826 }
836827
837828 int register_atmdevice_notifier(struct notifier_block *nb)