mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Marek Szyprowski <m.szyprowski@samsung.com>
To: Shigeru Yoshida <syoshida@redhat.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Alexander Potapenko <glider@google.com>
Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] dma: swiotlb: add KMSAN annotations to swiotlb_bounce()
Date: Fri, 20 Mar 2026 11:31:01 +0100	[thread overview]
Message-ID: <e351bf79-8a97-4df9-a4ba-17a56c7903a5@samsung.com> (raw)
In-Reply-To: <20260315082750.2375581-1-syoshida@redhat.com>

On 15.03.2026 09:27, Shigeru Yoshida wrote:
> When a device performs DMA to a bounce buffer, KMSAN is unaware of
> the write and does not mark the data as initialized.  When
> swiotlb_bounce() later copies the bounce buffer back to the original
> buffer, memcpy propagates the uninitialized shadow to the original
> buffer, causing false positive uninit-value reports.
>
> Fix this by calling kmsan_unpoison_memory() on the bounce buffer
> before copying it back in the DMA_FROM_DEVICE path, so that memcpy
> naturally propagates initialized shadow to the destination.
>
> Suggested-by: Alexander Potapenko <glider@google.com>
> Link: https://lore.kernel.org/CAG_fn=WUGta-paG1BgsGRoAR+fmuCgh3xo=R3XdzOt_-DqSdHw@mail.gmail.com/
> Fixes: 7ade4f10779c ("dma: kmsan: unpoison DMA mappings")
> Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>

Applied to dma-mapping-fixes. Thanks!

> ---
>   kernel/dma/swiotlb.c | 21 +++++++++++++++++++--
>   1 file changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> index d8e6f1d889d5..9fd73700ddcf 100644
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -30,6 +30,7 @@
>   #include <linux/gfp.h>
>   #include <linux/highmem.h>
>   #include <linux/io.h>
> +#include <linux/kmsan-checks.h>
>   #include <linux/iommu-helper.h>
>   #include <linux/init.h>
>   #include <linux/memblock.h>
> @@ -901,10 +902,19 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
>   
>   			local_irq_save(flags);
>   			page = pfn_to_page(pfn);
> -			if (dir == DMA_TO_DEVICE)
> +			if (dir == DMA_TO_DEVICE) {
> +				/*
> +				 * Ideally, kmsan_check_highmem_page()
> +				 * could be used here to detect infoleaks,
> +				 * but callers may map uninitialized buffers
> +				 * that will be written by the device,
> +				 * causing false positives.
> +				 */
>   				memcpy_from_page(vaddr, page, offset, sz);
> -			else
> +			} else {
> +				kmsan_unpoison_memory(vaddr, sz);
>   				memcpy_to_page(page, offset, vaddr, sz);
> +			}
>   			local_irq_restore(flags);
>   
>   			size -= sz;
> @@ -913,8 +923,15 @@ static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size
>   			offset = 0;
>   		}
>   	} else if (dir == DMA_TO_DEVICE) {
> +		/*
> +		 * Ideally, kmsan_check_memory() could be used here to detect
> +		 * infoleaks (uninitialized data being sent to device), but
> +		 * callers may map uninitialized buffers that will be written
> +		 * by the device, causing false positives.
> +		 */
>   		memcpy(vaddr, phys_to_virt(orig_addr), size);
>   	} else {
> +		kmsan_unpoison_memory(vaddr, size);
>   		memcpy(phys_to_virt(orig_addr), vaddr, size);
>   	}
>   }

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


      reply	other threads:[~2026-03-20 10:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20260315082850eucas1p27ecb1059ada2007cf021455e72563f5b@eucas1p2.samsung.com>
2026-03-15  8:27 ` Shigeru Yoshida
2026-03-20 10:31   ` Marek Szyprowski [this message]

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=e351bf79-8a97-4df9-a4ba-17a56c7903a5@samsung.com \
    --to=m.szyprowski@samsung.com \
    --cc=akpm@linux-foundation.org \
    --cc=glider@google.com \
    --cc=iommu@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=syoshida@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®