All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Yunsheng Lin <linyunsheng@huawei.com>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev
Subject: [linyunsheng:page_frag_cache_v4_0509 11/13] net/mptcp/protocol.c:1852:10: warning: variable 'offset' is used uninitialized whenever 'if' condition is false
Date: Mon, 13 May 2024 03:16:22 +0800	[thread overview]
Message-ID: <202405130320.61VsUSWA-lkp@intel.com> (raw)

tree:   https://github.com/gestionlin/linux.git page_frag_cache_v4_0509
head:   91a2b1a96a0ee263617669cdf8564aac759b0719
commit: c868933189e44e45cf7ff0088d9bc5f77bf63e83 [11/13] net: replace page_frag with page_frag_cache
config: s390-defconfig (https://download.01.org/0day-ci/archive/20240513/202405130320.61VsUSWA-lkp@intel.com/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project b910bebc300dafb30569cecc3017b446ea8eafa0)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240513/202405130320.61VsUSWA-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202405130320.61VsUSWA-lkp@intel.com/

All warnings (new ones prefixed by >>):

   In file included from net/mptcp/protocol.c:10:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/s390/include/asm/elf.h:173:
   In file included from arch/s390/include/asm/mmu_context.h:11:
   In file included from arch/s390/include/asm/pgalloc.h:18:
   In file included from include/linux/mm.h:2210:
   include/linux/vmstat.h:508:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     508 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     509 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:515:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     515 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     516 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:522:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:527:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     527 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     528 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:536:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     536 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     537 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   In file included from net/mptcp/protocol.c:11:
   In file included from include/linux/netdevice.h:38:
   In file included from include/net/net_namespace.h:43:
   In file included from include/linux/skbuff.h:28:
   In file included from include/linux/dma-mapping.h:11:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:78:
   include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     547 |         val = __raw_readb(PCI_IOBASE + addr);
         |                           ~~~~~~~~~~ ^
   include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     560 |         val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro '__le16_to_cpu'
      37 | #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
         |                                                           ^
   include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
     102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
         |                                                      ^
   In file included from net/mptcp/protocol.c:11:
   In file included from include/linux/netdevice.h:38:
   In file included from include/net/net_namespace.h:43:
   In file included from include/linux/skbuff.h:28:
   In file included from include/linux/dma-mapping.h:11:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:78:
   include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     573 |         val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro '__le32_to_cpu'
      35 | #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
         |                                                           ^
   include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
     115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
         |                                                      ^
   In file included from net/mptcp/protocol.c:11:
   In file included from include/linux/netdevice.h:38:
   In file included from include/net/net_namespace.h:43:
   In file included from include/linux/skbuff.h:28:
   In file included from include/linux/dma-mapping.h:11:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:78:
   include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     584 |         __raw_writeb(value, PCI_IOBASE + addr);
         |                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     594 |         __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     604 |         __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     692 |         readsb(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     700 |         readsw(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     708 |         readsl(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     717 |         writesb(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     726 |         writesw(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     735 |         writesl(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
>> net/mptcp/protocol.c:1852:10: warning: variable 'offset' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
    1852 |                 page = page_frag_alloc_probe(pfrag, &offset, &size, &va);
         |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/page_frag_cache.h:155:6: note: expanded from macro 'page_frag_alloc_probe'
     155 |         if (likely((nc)->remaining >= *fragsz))                         \
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:76:20: note: expanded from macro 'likely'
      76 | # define likely(x)      __builtin_expect(!!(x), 1)
         |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/mptcp/protocol.c:1853:59: note: uninitialized use occurs here
    1853 |                 dfrag_collapsed = mptcp_frag_can_collapse_to(msk, page, offset,
         |                                                                         ^~~~~~
   net/mptcp/protocol.c:1852:10: note: remove the 'if' if its condition is always true
    1852 |                 page = page_frag_alloc_probe(pfrag, &offset, &size, &va);
         |                        ^
   include/linux/page_frag_cache.h:155:2: note: expanded from macro 'page_frag_alloc_probe'
     155 |         if (likely((nc)->remaining >= *fragsz))                         \
         |         ^
   net/mptcp/protocol.c:1835:22: note: initialize the variable 'offset' to silence this warning
    1835 |                 unsigned int offset, size;
         |                                    ^
         |                                     = 0
   18 warnings generated.


vim +1852 net/mptcp/protocol.c

  1792	
  1793	static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
  1794	{
  1795		struct mptcp_sock *msk = mptcp_sk(sk);
  1796		struct page_frag_cache *pfrag;
  1797		size_t copied = 0;
  1798		int ret = 0;
  1799		long timeo;
  1800	
  1801		/* silently ignore everything else */
  1802		msg->msg_flags &= MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL | MSG_FASTOPEN;
  1803	
  1804		lock_sock(sk);
  1805	
  1806		if (unlikely(inet_test_bit(DEFER_CONNECT, sk) ||
  1807			     msg->msg_flags & MSG_FASTOPEN)) {
  1808			int copied_syn = 0;
  1809	
  1810			ret = mptcp_sendmsg_fastopen(sk, msg, len, &copied_syn);
  1811			copied += copied_syn;
  1812			if (ret == -EINPROGRESS && copied_syn > 0)
  1813				goto out;
  1814			else if (ret)
  1815				goto do_error;
  1816		}
  1817	
  1818		timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
  1819	
  1820		if ((1 << sk->sk_state) & ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT)) {
  1821			ret = sk_stream_wait_connect(sk, &timeo);
  1822			if (ret)
  1823				goto do_error;
  1824		}
  1825	
  1826		ret = -EPIPE;
  1827		if (unlikely(sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN)))
  1828			goto do_error;
  1829	
  1830		pfrag = sk_page_frag(sk);
  1831	
  1832		while (msg_data_left(msg)) {
  1833			int total_ts, frag_truesize = 0;
  1834			struct mptcp_data_frag *dfrag;
  1835			unsigned int offset, size;
  1836			bool dfrag_collapsed;
  1837			struct page *page;
  1838			u32 copy_limit;
  1839			size_t psize;
  1840			void *va;
  1841	
  1842			/* ensure fitting the notsent_lowat() constraint */
  1843			copy_limit = mptcp_send_limit(sk);
  1844			if (!copy_limit)
  1845				goto wait_for_memory;
  1846	
  1847			/* reuse tail pfrag, if possible, or carve a new one from the
  1848			 * page allocator
  1849			 */
  1850			dfrag = mptcp_pending_tail(sk);
  1851			size = 1;
> 1852			page = page_frag_alloc_probe(pfrag, &offset, &size, &va);
  1853			dfrag_collapsed = mptcp_frag_can_collapse_to(msk, page, offset,
  1854								     dfrag);
  1855			if (!dfrag_collapsed) {
  1856				size = 32U + sizeof(struct mptcp_data_frag);
  1857				page = mptcp_page_frag_alloc_prepare(sk, pfrag, &offset,
  1858								     &size, &va);
  1859				if (!page)
  1860					goto wait_for_memory;
  1861	
  1862				dfrag = mptcp_carve_data_frag(msk, page, offset);
  1863				frag_truesize = dfrag->overhead;
  1864				va += dfrag->overhead;
  1865			}
  1866	
  1867			/* we do not bound vs wspace, to allow a single packet.
  1868			 * memory accounting will prevent execessive memory usage
  1869			 * anyway
  1870			 */
  1871			psize = size - frag_truesize;
  1872			psize = min_t(size_t, psize, msg_data_left(msg));
  1873			psize = min_t(size_t, psize, copy_limit);
  1874			total_ts = psize + frag_truesize;
  1875	
  1876			if (!sk_wmem_schedule(sk, total_ts))
  1877				goto wait_for_memory;
  1878	
  1879			ret = do_copy_data_nocache(sk, psize, &msg->msg_iter, va);
  1880			if (ret)
  1881				goto do_error;
  1882	
  1883			/* data successfully copied into the write queue */
  1884			sk_forward_alloc_add(sk, -total_ts);
  1885			copied += psize;
  1886			dfrag->data_len += psize;
  1887			frag_truesize += psize;
  1888			WRITE_ONCE(msk->write_seq, msk->write_seq + psize);
  1889	
  1890			/* charge data on mptcp pending queue to the msk socket
  1891			 * Note: we charge such data both to sk and ssk
  1892			 */
  1893			sk_wmem_queued_add(sk, frag_truesize);
  1894			if (!dfrag_collapsed) {
  1895				page_frag_alloc_commit(pfrag, frag_truesize);
  1896				list_add_tail(&dfrag->list, &msk->rtx_queue);
  1897				if (!msk->first_pending)
  1898					WRITE_ONCE(msk->first_pending, dfrag);
  1899			} else {
  1900				page_frag_alloc_commit_noref(pfrag, frag_truesize);
  1901			}
  1902	
  1903			pr_debug("msk=%p dfrag at seq=%llu len=%u sent=%u new=%d", msk,
  1904				 dfrag->data_seq, dfrag->data_len, dfrag->already_sent,
  1905				 !dfrag_collapsed);
  1906	
  1907			continue;
  1908	
  1909	wait_for_memory:
  1910			set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
  1911			__mptcp_push_pending(sk, msg->msg_flags);
  1912			ret = sk_stream_wait_memory(sk, &timeo);
  1913			if (ret)
  1914				goto do_error;
  1915		}
  1916	
  1917		if (copied)
  1918			__mptcp_push_pending(sk, msg->msg_flags);
  1919	
  1920	out:
  1921		release_sock(sk);
  1922		return copied;
  1923	
  1924	do_error:
  1925		if (copied)
  1926			goto out;
  1927	
  1928		copied = sk_stream_error(sk, msg->msg_flags, ret);
  1929		goto out;
  1930	}
  1931	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2024-05-12 19:17 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202405130320.61VsUSWA-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=linyunsheng@huawei.com \
    --cc=llvm@lists.linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.