ip_sockglue.c (6b5f43ea08150e7ff72f734545101c58489ead5b) ip_sockglue.c (8e8cfb114d9f1e2efddb892f993c1ad61635c85e)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * INET An implementation of the TCP/IP protocol suite for the LINUX
4 * operating system. INET is implemented using the BSD Socket
5 * interface as the means of communication with the user level.
6 *
7 * The IP to API glue.
8 *

--- 419 unchanged lines hidden (view full) ---

428 serr->ee.ee_pad = 0;
429 serr->ee.ee_info = info;
430 serr->ee.ee_data = 0;
431 serr->addr_offset = (u8 *)&(((struct iphdr *)(icmp_hdr(skb) + 1))->daddr) -
432 skb_network_header(skb);
433 serr->port = port;
434
435 if (skb_pull(skb, payload - skb->data)) {
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * INET An implementation of the TCP/IP protocol suite for the LINUX
4 * operating system. INET is implemented using the BSD Socket
5 * interface as the means of communication with the user level.
6 *
7 * The IP to API glue.
8 *

--- 419 unchanged lines hidden (view full) ---

428 serr->ee.ee_pad = 0;
429 serr->ee.ee_info = info;
430 serr->ee.ee_data = 0;
431 serr->addr_offset = (u8 *)&(((struct iphdr *)(icmp_hdr(skb) + 1))->daddr) -
432 skb_network_header(skb);
433 serr->port = port;
434
435 if (skb_pull(skb, payload - skb->data)) {
436 if (inet_sk(sk)->recverr_rfc4884)
436 if (inet_test_bit(RECVERR_RFC4884, sk))
437 ipv4_icmp_error_rfc4884(skb, &serr->ee.ee_rfc4884);
438
439 skb_reset_transport_header(skb);
440 if (sock_queue_err_skb(sk, skb) == 0)
441 return;
442 }
443 kfree_skb(skb);
444}

--- 530 unchanged lines hidden (view full) ---

975 return -EINVAL;
976 inet_assign_bit(RECVFRAGSIZE, sk, val);
977 return 0;
978 case IP_RECVERR:
979 inet_assign_bit(RECVERR, sk, val);
980 if (!val)
981 skb_queue_purge(&sk->sk_error_queue);
982 return 0;
437 ipv4_icmp_error_rfc4884(skb, &serr->ee.ee_rfc4884);
438
439 skb_reset_transport_header(skb);
440 if (sock_queue_err_skb(sk, skb) == 0)
441 return;
442 }
443 kfree_skb(skb);
444}

--- 530 unchanged lines hidden (view full) ---

975 return -EINVAL;
976 inet_assign_bit(RECVFRAGSIZE, sk, val);
977 return 0;
978 case IP_RECVERR:
979 inet_assign_bit(RECVERR, sk, val);
980 if (!val)
981 skb_queue_purge(&sk->sk_error_queue);
982 return 0;
983 case IP_RECVERR_RFC4884:
984 if (val < 0 || val > 1)
985 return -EINVAL;
986 inet_assign_bit(RECVERR_RFC4884, sk, val);
987 return 0;
983 }
984
985 err = 0;
986 if (needs_rtnl)
987 rtnl_lock();
988 sockopt_lock_sock(sk);
989
990 switch (optname) {

--- 70 unchanged lines hidden (view full) ---

1061 case IP_BIND_ADDRESS_NO_PORT:
1062 inet->bind_address_no_port = val ? 1 : 0;
1063 break;
1064 case IP_MTU_DISCOVER:
1065 if (val < IP_PMTUDISC_DONT || val > IP_PMTUDISC_OMIT)
1066 goto e_inval;
1067 inet->pmtudisc = val;
1068 break;
988 }
989
990 err = 0;
991 if (needs_rtnl)
992 rtnl_lock();
993 sockopt_lock_sock(sk);
994
995 switch (optname) {

--- 70 unchanged lines hidden (view full) ---

1066 case IP_BIND_ADDRESS_NO_PORT:
1067 inet->bind_address_no_port = val ? 1 : 0;
1068 break;
1069 case IP_MTU_DISCOVER:
1070 if (val < IP_PMTUDISC_DONT || val > IP_PMTUDISC_OMIT)
1071 goto e_inval;
1072 inet->pmtudisc = val;
1073 break;
1069 case IP_RECVERR_RFC4884:
1070 if (val < 0 || val > 1)
1071 goto e_inval;
1072 inet->recverr_rfc4884 = !!val;
1073 break;
1074 case IP_MULTICAST_TTL:
1075 if (sk->sk_type == SOCK_STREAM)
1076 goto e_inval;
1077 if (optlen < 1)
1078 goto e_inval;
1079 if (val == -1)
1080 val = 1;
1081 if (val < 0 || val > 255)

--- 488 unchanged lines hidden (view full) ---

1570 val = inet_test_bit(CHECKSUM, sk);
1571 goto copyval;
1572 case IP_RECVFRAGSIZE:
1573 val = inet_test_bit(RECVFRAGSIZE, sk);
1574 goto copyval;
1575 case IP_RECVERR:
1576 val = inet_test_bit(RECVERR, sk);
1577 goto copyval;
1074 case IP_MULTICAST_TTL:
1075 if (sk->sk_type == SOCK_STREAM)
1076 goto e_inval;
1077 if (optlen < 1)
1078 goto e_inval;
1079 if (val == -1)
1080 val = 1;
1081 if (val < 0 || val > 255)

--- 488 unchanged lines hidden (view full) ---

1570 val = inet_test_bit(CHECKSUM, sk);
1571 goto copyval;
1572 case IP_RECVFRAGSIZE:
1573 val = inet_test_bit(RECVFRAGSIZE, sk);
1574 goto copyval;
1575 case IP_RECVERR:
1576 val = inet_test_bit(RECVERR, sk);
1577 goto copyval;
1578 case IP_RECVERR_RFC4884:
1579 val = inet_test_bit(RECVERR_RFC4884, sk);
1580 goto copyval;
1578 }
1579
1580 if (needs_rtnl)
1581 rtnl_lock();
1582 sockopt_lock_sock(sk);
1583
1584 switch (optname) {
1585 case IP_OPTIONS:

--- 58 unchanged lines hidden (view full) ---

1644 dst_release(dst);
1645 }
1646 if (!val) {
1647 sockopt_release_sock(sk);
1648 return -ENOTCONN;
1649 }
1650 break;
1651 }
1581 }
1582
1583 if (needs_rtnl)
1584 rtnl_lock();
1585 sockopt_lock_sock(sk);
1586
1587 switch (optname) {
1588 case IP_OPTIONS:

--- 58 unchanged lines hidden (view full) ---

1647 dst_release(dst);
1648 }
1649 if (!val) {
1650 sockopt_release_sock(sk);
1651 return -ENOTCONN;
1652 }
1653 break;
1654 }
1652 case IP_RECVERR_RFC4884:
1653 val = inet->recverr_rfc4884;
1654 break;
1655 case IP_MULTICAST_TTL:
1656 val = inet->mc_ttl;
1657 break;
1658 case IP_MULTICAST_LOOP:
1659 val = inet->mc_loop;
1660 break;
1661 case IP_UNICAST_IF:
1662 val = (__force int)htonl((__u32) inet->uc_index);

--- 152 unchanged lines hidden ---
1655 case IP_MULTICAST_TTL:
1656 val = inet->mc_ttl;
1657 break;
1658 case IP_MULTICAST_LOOP:
1659 val = inet->mc_loop;
1660 break;
1661 case IP_UNICAST_IF:
1662 val = (__force int)htonl((__u32) inet->uc_index);

--- 152 unchanged lines hidden ---