Commit b3fec0fe authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/vegard/kmemcheck: (39 commits)
  signal: fix __send_signal() false positive kmemcheck warning
  fs: fix do_mount_root() false positive kmemcheck warning
  fs: introduce __getname_gfp()
  trace: annotate bitfields in struct ring_buffer_event
  net: annotate struct sock bitfield
  c2port: annotate bitfield for kmemcheck
  net: annotate inet_timewait_sock bitfields
  ieee1394/csr1212: fix false positive kmemcheck report
  ieee1394: annotate bitfield
  net: annotate bitfields in struct inet_sock
  net: use kmemcheck bitfields API for skbuff
  kmemcheck: introduce bitfield API
  kmemcheck: add opcode self-testing at boot
  x86: unify pte_hidden
  x86: make _PAGE_HIDDEN conditional
  kmemcheck: make kconfig accessible for other architectures
  kmemcheck: enable in the x86 Kconfig
  kmemcheck: add hooks for the page allocator
  kmemcheck: add hooks for page- and sg-dma-mappings
  kmemcheck: don't track page tables
  ...
parents e1f5b94f 722f2a6c
Loading
Loading
Loading
Loading
+773 −0

File added.

Preview size limit exceeded, changes collapsed.

+8 −0
Original line number Diff line number Diff line
@@ -3406,6 +3406,14 @@ F: drivers/serial/kgdboc.c
F:	include/linux/kgdb.h
F:	kernel/kgdb.c

KMEMCHECK
P:	Vegard Nossum
M:	vegardno@ifi.uio.no
P	Pekka Enberg
M:	penberg@cs.helsinki.fi
L:	linux-kernel@vger.kernel.org
S:	Maintained

KMEMLEAK
P:	Catalin Marinas
M:	catalin.marinas@arm.com
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ config X86
	select HAVE_KERNEL_GZIP
	select HAVE_KERNEL_BZIP2
	select HAVE_KERNEL_LZMA
	select HAVE_ARCH_KMEMCHECK

config OUTPUT_FORMAT
	string
+5 −0
Original line number Diff line number Diff line
@@ -81,6 +81,11 @@ ifdef CONFIG_CC_STACKPROTECTOR
        endif
endif

# Don't unroll struct assignments with kmemcheck enabled
ifeq ($(CONFIG_KMEMCHECK),y)
	KBUILD_CFLAGS += $(call cc-option,-fno-builtin-memcpy)
endif

# Stackpointer is addressed different for 32 bit and 64 bit x86
sp-$(CONFIG_X86_32) := esp
sp-$(CONFIG_X86_64) := rsp
+7 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
 * Documentation/DMA-API.txt for documentation.
 */

#include <linux/kmemcheck.h>
#include <linux/scatterlist.h>
#include <linux/dma-debug.h>
#include <linux/dma-attrs.h>
@@ -60,6 +61,7 @@ dma_map_single(struct device *hwdev, void *ptr, size_t size,
	dma_addr_t addr;

	BUG_ON(!valid_dma_direction(dir));
	kmemcheck_mark_initialized(ptr, size);
	addr = ops->map_page(hwdev, virt_to_page(ptr),
			     (unsigned long)ptr & ~PAGE_MASK, size,
			     dir, NULL);
@@ -87,8 +89,12 @@ dma_map_sg(struct device *hwdev, struct scatterlist *sg,
{
	struct dma_map_ops *ops = get_dma_ops(hwdev);
	int ents;
	struct scatterlist *s;
	int i;

	BUG_ON(!valid_dma_direction(dir));
	for_each_sg(sg, s, nents, i)
		kmemcheck_mark_initialized(sg_virt(s), s->length);
	ents = ops->map_sg(hwdev, sg, nents, dir, NULL);
	debug_dma_map_sg(hwdev, sg, nents, ents, dir);

@@ -200,6 +206,7 @@ static inline dma_addr_t dma_map_page(struct device *dev, struct page *page,
	dma_addr_t addr;

	BUG_ON(!valid_dma_direction(dir));
	kmemcheck_mark_initialized(page_address(page) + offset, size);
	addr = ops->map_page(dev, page, offset, size, dir, NULL);
	debug_dma_map_page(dev, page, offset, size, dir, addr, false);

Loading