tree:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 975f7a88c64dfdfde014530730ba7a6f3141f773
commit: f1ff5ce2cd5ef3335f19c0f6576582c87045b04f [3218/12636] net, sk_msg: Clear
sk_user_data pointer on clone if tagged
reproduce:
# apt-get install sparse
# sparse version:
git checkout f1ff5ce2cd5ef3335f19c0f6576582c87045b04f
make ARCH=x86_64 allmodconfig
make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
:::::: branch date: 13 hours ago
:::::: commit date: 5 weeks ago
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
include/trace/events/sock.h:178:1: sparse: error: directive in macro's argument
list
include/trace/events/sock.h:185:1: sparse: error: directive in macro's argument
list
> net/core/sock.c:1872:25: sparse: error: incompatible types in
comparison expression (different address spaces):
net/core/sock.c:1872:25:
sparse: void [noderef] <asn:4> *
net/core/sock.c:1872:25: sparse: void *
#
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commi...
git remote add linux-next
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git remote update linux-next
git checkout f1ff5ce2cd5ef3335f19c0f6576582c87045b04f
vim +1872 net/core/sock.c
581319c58600b5 Paolo Abeni 2017-03-09 1786
e56c57d0d3fdbb Eric Dumazet 2011-11-08 1787 /**
e56c57d0d3fdbb Eric Dumazet 2011-11-08 1788 * sk_clone_lock - clone a
socket, and lock its clone
e56c57d0d3fdbb Eric Dumazet 2011-11-08 1789 * @sk: the socket to clone
e56c57d0d3fdbb Eric Dumazet 2011-11-08 1790 * @priority: for allocation
(%GFP_KERNEL, %GFP_ATOMIC, etc)
e56c57d0d3fdbb Eric Dumazet 2011-11-08 1791 *
e56c57d0d3fdbb Eric Dumazet 2011-11-08 1792 * Caller must unlock socket
even in error path (bh_unlock_sock(newsk))
e56c57d0d3fdbb Eric Dumazet 2011-11-08 1793 */
e56c57d0d3fdbb Eric Dumazet 2011-11-08 1794 struct sock *sk_clone_lock(const
struct sock *sk, const gfp_t priority)
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1795 {
b8e202d1d1d0f1 Jakub Sitnicki 2020-02-18 1796 struct proto *prot =
READ_ONCE(sk->sk_prot);
8fd1d178a3f177 Pavel Emelyanov 2007-11-01 1797 struct sock *newsk;
278571baca2aec Alexei Starovoitov 2014-07-30 1798 bool is_charged = true;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1799
b8e202d1d1d0f1 Jakub Sitnicki 2020-02-18 1800 newsk = sk_prot_alloc(prot,
priority, sk->sk_family);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1801 if (newsk != NULL) {
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1802 struct sk_filter *filter;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1803
892c141e629822 Venkat Yekkirala 2006-08-04 1804 sock_copy(newsk, sk);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1805
b8e202d1d1d0f1 Jakub Sitnicki 2020-02-18 1806 newsk->sk_prot_creator =
prot;
9d538fa60bad4f Christoph Paasch 2017-09-26 1807
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1808 /* SANITY */
8a68173691f036 Sowmini Varadhan 2015-07-30 1809 if
(likely(newsk->sk_net_refcnt))
3b1e0a655f8eba YOSHIFUJI Hideaki 2008-03-26 1810 get_net(sock_net(newsk));
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1811
sk_node_init(&newsk->sk_node);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1812 sock_lock_init(newsk);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1813 bh_lock_sock(newsk);
fa438ccfdfd3f6 Eric Dumazet 2007-03-04 1814 newsk->sk_backlog.head =
newsk->sk_backlog.tail = NULL;
8eae939f140032 Zhu Yi 2010-03-04 1815 newsk->sk_backlog.len = 0;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1816
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1817
atomic_set(&newsk->sk_rmem_alloc, 0);
2b85a34e911bf4 Eric Dumazet 2009-06-11 1818 /*
2b85a34e911bf4 Eric Dumazet 2009-06-11 1819 * sk_wmem_alloc set to one
(see sk_free() and sock_wfree())
2b85a34e911bf4 Eric Dumazet 2009-06-11 1820 */
14afee4b6092fd Reshetova, Elena 2017-06-30 1821
refcount_set(&newsk->sk_wmem_alloc, 1);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1822
atomic_set(&newsk->sk_omem_alloc, 0);
581319c58600b5 Paolo Abeni 2017-03-09 1823 sk_init_common(newsk);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1824
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1825 newsk->sk_dst_cache =
NULL;
9b8805a325591c Julian Anastasov 2017-02-06 1826
newsk->sk_dst_pending_confirm = 0;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1827 newsk->sk_wmem_queued = 0;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1828 newsk->sk_forward_alloc =
0;
9caad864151e52 Eric Dumazet 2016-04-01 1829
atomic_set(&newsk->sk_drops, 0);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1830 newsk->sk_send_head =
NULL;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1831 newsk->sk_userlocks =
sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
52267790ef52d7 Willem de Bruijn 2017-08-03 1832
atomic_set(&newsk->sk_zckey, 0);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1833
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1834 sock_reset_flag(newsk,
SOCK_DONE);
edbe69ef2c90fc Roman Gushchin 2018-02-02 1835 mem_cgroup_sk_alloc(newsk);
c0576e3975084d Eric Dumazet 2017-10-10 1836
cgroup_sk_alloc(&newsk->sk_cgrp_data);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1837
eefca20eb20c66 Eric Dumazet 2017-10-02 1838 rcu_read_lock();
eefca20eb20c66 Eric Dumazet 2017-10-02 1839 filter =
rcu_dereference(sk->sk_filter);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1840 if (filter != NULL)
278571baca2aec Alexei Starovoitov 2014-07-30 1841 /* though it's an empty
new sock, the charging may fail
278571baca2aec Alexei Starovoitov 2014-07-30 1842 * if sysctl_optmem_max was
changed between creation of
278571baca2aec Alexei Starovoitov 2014-07-30 1843 * original socket and
cloning
278571baca2aec Alexei Starovoitov 2014-07-30 1844 */
278571baca2aec Alexei Starovoitov 2014-07-30 1845 is_charged =
sk_filter_charge(newsk, filter);
eefca20eb20c66 Eric Dumazet 2017-10-02 1846
RCU_INIT_POINTER(newsk->sk_filter, filter);
eefca20eb20c66 Eric Dumazet 2017-10-02 1847 rcu_read_unlock();
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1848
d188ba86dd07a7 Eric Dumazet 2015-12-08 1849 if (unlikely(!is_charged ||
xfrm_sk_clone_policy(newsk, sk))) {
a97e50cc4cb67e Daniel Borkmann 2017-03-22 1850 /* We need to make sure that
we don't uncharge the new
a97e50cc4cb67e Daniel Borkmann 2017-03-22 1851 * socket if we couldn't
charge it in the first place
a97e50cc4cb67e Daniel Borkmann 2017-03-22 1852 * as otherwise we uncharge
the parent's filter.
a97e50cc4cb67e Daniel Borkmann 2017-03-22 1853 */
a97e50cc4cb67e Daniel Borkmann 2017-03-22 1854 if (!is_charged)
a97e50cc4cb67e Daniel Borkmann 2017-03-22 1855
RCU_INIT_POINTER(newsk->sk_filter, NULL);
94352d45092c23 Arnaldo Carvalho de Melo 2017-03-01 1856 sk_free_unlock_clone(newsk);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1857 newsk = NULL;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1858 goto out;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1859 }
fa463497679352 Craig Gallek 2016-02-10 1860
RCU_INIT_POINTER(newsk->sk_reuseport_cb, NULL);
8f51dfc73bf181 Stanislav Fomichev 2019-08-14 1861
8f51dfc73bf181 Stanislav Fomichev 2019-08-14 1862 if (bpf_sk_storage_clone(sk,
newsk)) {
8f51dfc73bf181 Stanislav Fomichev 2019-08-14 1863 sk_free_unlock_clone(newsk);
8f51dfc73bf181 Stanislav Fomichev 2019-08-14 1864 newsk = NULL;
8f51dfc73bf181 Stanislav Fomichev 2019-08-14 1865 goto out;
8f51dfc73bf181 Stanislav Fomichev 2019-08-14 1866 }
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1867
f1ff5ce2cd5ef3 Jakub Sitnicki 2020-02-18 1868 /* Clear sk_user_data if
parent had the pointer tagged
f1ff5ce2cd5ef3 Jakub Sitnicki 2020-02-18 1869 * as not suitable for copying
when cloning.
f1ff5ce2cd5ef3 Jakub Sitnicki 2020-02-18 1870 */
f1ff5ce2cd5ef3 Jakub Sitnicki 2020-02-18 1871 if
(sk_user_data_is_nocopy(newsk))
f1ff5ce2cd5ef3 Jakub Sitnicki 2020-02-18 @1872
RCU_INIT_POINTER(newsk->sk_user_data, NULL);
f1ff5ce2cd5ef3 Jakub Sitnicki 2020-02-18 1873
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1874 newsk->sk_err = 0;
e551c32d57c889 Eric Dumazet 2016-10-28 1875 newsk->sk_err_soft = 0;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1876 newsk->sk_priority = 0;
2c8c56e15df3d4 Eric Dumazet 2014-11-11 1877 newsk->sk_incoming_cpu =
raw_smp_processor_id();
648845ab7e2009 Tonghao Zhang 2017-12-14 1878 if
(likely(newsk->sk_net_refcnt))
648845ab7e2009 Tonghao Zhang 2017-12-14 1879
sock_inuse_add(sock_net(newsk), 1);
d979a39d7242e0 Johannes Weiner 2016-09-19 1880
4dc6dc7162c08b Eric Dumazet 2009-07-15 1881 /*
4dc6dc7162c08b Eric Dumazet 2009-07-15 1882 * Before updating sk_refcnt,
we must commit prior changes to memory
4dc6dc7162c08b Eric Dumazet 2009-07-15 1883 *
(Documentation/RCU/rculist_nulls.txt for details)
4dc6dc7162c08b Eric Dumazet 2009-07-15 1884 */
4dc6dc7162c08b Eric Dumazet 2009-07-15 1885 smp_wmb();
41c6d650f6537e Reshetova, Elena 2017-06-30 1886
refcount_set(&newsk->sk_refcnt, 2);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1887
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1888 /*
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1889 * Increment the counter in
the same struct proto as the master
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1890 * sock (sk_refcnt_debug_inc
uses newsk->sk_prot->socks, that
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1891 * is the same as
sk->sk_prot->socks, as this field was copied
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1892 * with memcpy).
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1893 *
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1894 * This _changes_ the previous
behaviour, where
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1895 * tcp_create_openreq_child
always was incrementing the
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1896 * equivalent to
tcp_prot->socks (inet_sock_nr), so this have
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1897 * to be taken into account in
all callers. -acme
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1898 */
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1899 sk_refcnt_debug_inc(newsk);
972692e0db9b0a David S. Miller 2008-06-17 1900 sk_set_socket(newsk, NULL);
c2f26e8f8788db Li RongQing 2019-02-22 1901
RCU_INIT_POINTER(newsk->sk_wq, NULL);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1902
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1903 if
(newsk->sk_prot->sockets_allocated)
180d8cd942ce33 Glauber Costa 2011-12-11 1904
sk_sockets_allocated_inc(newsk);
704da560c0a012 Octavian Purdila 2010-01-08 1905
080a270f5adec1 Hannes Frederic Sowa 2015-10-26 1906 if (sock_needs_netstamp(sk)
&&
080a270f5adec1 Hannes Frederic Sowa 2015-10-26 1907 newsk->sk_flags &
SK_FLAGS_TIMESTAMP)
704da560c0a012 Octavian Purdila 2010-01-08 1908 net_enable_timestamp();
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1909 }
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1910 out:
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1911 return newsk;
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1912 }
e56c57d0d3fdbb Eric Dumazet 2011-11-08 1913
EXPORT_SYMBOL_GPL(sk_clone_lock);
87d11ceb9deb7a Arnaldo Carvalho de Melo 2005-08-09 1914
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org