All of lore.kernel.org
 help / color / mirror / Atom feed
* kernel/trace/ring_buffer.c:6265 __rb_map_vma() warn: unsigned '_x' is never less than zero.
@ 2025-02-15 12:07 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-02-15 12:07 UTC (permalink / raw)
  To: Vincent Donnefort; +Cc: oe-kbuild-all, linux-kernel, Steven Rostedt (Google)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   7ff71e6d923969d933e1ba7e0db857782d36cd19
commit: 117c39200d9d760cbd5944bb89efb7b9c51965aa ring-buffer: Introducing ring-buffer mapping functions
date:   9 months ago
config: riscv-randconfig-r073-20250213 (https://download.01.org/0day-ci/archive/20250215/202502151925.c1S00bk3-lkp@intel.com/config)
compiler: riscv32-linux-gcc (GCC) 14.2.0

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/202502151925.c1S00bk3-lkp@intel.com/

New smatch warnings:
kernel/trace/ring_buffer.c:6265 __rb_map_vma() warn: unsigned '_x' is never less than zero.

Old smatch warnings:
include/linux/mm.h:1306 virt_to_folio() warn: unsigned '_x' is never less than zero.

vim +/_x +6265 kernel/trace/ring_buffer.c

  6212	
  6213	/*
  6214	 *   +--------------+  pgoff == 0
  6215	 *   |   meta page  |
  6216	 *   +--------------+  pgoff == 1
  6217	 *   | subbuffer 0  |
  6218	 *   |              |
  6219	 *   +--------------+  pgoff == (1 + (1 << subbuf_order))
  6220	 *   | subbuffer 1  |
  6221	 *   |              |
  6222	 *         ...
  6223	 */
  6224	#ifdef CONFIG_MMU
  6225	static int __rb_map_vma(struct ring_buffer_per_cpu *cpu_buffer,
  6226				struct vm_area_struct *vma)
  6227	{
  6228		unsigned long nr_subbufs, nr_pages, vma_pages, pgoff = vma->vm_pgoff;
  6229		unsigned int subbuf_pages, subbuf_order;
  6230		struct page **pages;
  6231		int p = 0, s = 0;
  6232		int err;
  6233	
  6234		/* Refuse MP_PRIVATE or writable mappings */
  6235		if (vma->vm_flags & VM_WRITE || vma->vm_flags & VM_EXEC ||
  6236		    !(vma->vm_flags & VM_MAYSHARE))
  6237			return -EPERM;
  6238	
  6239		/*
  6240		 * Make sure the mapping cannot become writable later. Also tell the VM
  6241		 * to not touch these pages (VM_DONTCOPY | VM_DONTEXPAND).
  6242		 */
  6243		vm_flags_mod(vma, VM_DONTCOPY | VM_DONTEXPAND | VM_DONTDUMP,
  6244			     VM_MAYWRITE);
  6245	
  6246		lockdep_assert_held(&cpu_buffer->mapping_lock);
  6247	
  6248		subbuf_order = cpu_buffer->buffer->subbuf_order;
  6249		subbuf_pages = 1 << subbuf_order;
  6250	
  6251		nr_subbufs = cpu_buffer->nr_pages + 1; /* + reader-subbuf */
  6252		nr_pages = ((nr_subbufs) << subbuf_order) - pgoff + 1; /* + meta-page */
  6253	
  6254		vma_pages = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
  6255		if (!vma_pages || vma_pages > nr_pages)
  6256			return -EINVAL;
  6257	
  6258		nr_pages = vma_pages;
  6259	
  6260		pages = kcalloc(nr_pages, sizeof(*pages), GFP_KERNEL);
  6261		if (!pages)
  6262			return -ENOMEM;
  6263	
  6264		if (!pgoff) {
> 6265			pages[p++] = virt_to_page(cpu_buffer->meta_page);
  6266	
  6267			/*
  6268			 * TODO: Align sub-buffers on their size, once
  6269			 * vm_insert_pages() supports the zero-page.
  6270			 */
  6271		} else {
  6272			/* Skip the meta-page */
  6273			pgoff--;
  6274	
  6275			if (pgoff % subbuf_pages) {
  6276				err = -EINVAL;
  6277				goto out;
  6278			}
  6279	
  6280			s += pgoff / subbuf_pages;
  6281		}
  6282	
  6283		while (p < nr_pages) {
  6284			struct page *page = virt_to_page(cpu_buffer->subbuf_ids[s]);
  6285			int off = 0;
  6286	
  6287			if (WARN_ON_ONCE(s >= nr_subbufs)) {
  6288				err = -EINVAL;
  6289				goto out;
  6290			}
  6291	
  6292			for (; off < (1 << (subbuf_order)); off++, page++) {
  6293				if (p >= nr_pages)
  6294					break;
  6295	
  6296				pages[p++] = page;
  6297			}
  6298			s++;
  6299		}
  6300	
  6301		err = vm_insert_pages(vma, vma->vm_start, pages, &nr_pages);
  6302	
  6303	out:
  6304		kfree(pages);
  6305	
  6306		return err;
  6307	}
  6308	#else
  6309	static int __rb_map_vma(struct ring_buffer_per_cpu *cpu_buffer,
  6310				struct vm_area_struct *vma)
  6311	{
  6312		return -EOPNOTSUPP;
  6313	}
  6314	#endif
  6315	

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-02-15 12:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-15 12:07 kernel/trace/ring_buffer.c:6265 __rb_map_vma() warn: unsigned '_x' is never less than zero kernel test robot

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.