Re: [PATCH] virtio-console: avoid DMA from vmalloc area

Started by Arnd Bergmann on Jul 27, 2021

open the first message on its own page

Message details and related content
On Tue, Jul 27, 2021 at 3:13 PM Xianting Tian
[off-list ref] wrote:
quoted hunk
@@ -1127,13 +1128,18 @@ static int put_chars(u32 vtermno, const char *buf, int count)
        if (!port)
                return -EPIPE;

-       data = kmemdup(buf, count, GFP_ATOMIC);
-       if (!data)
-               return -ENOMEM;
+       if (is_vmalloc_addr(buf)) {
+               data = kmemdup(buf, count, GFP_ATOMIC);
What about buffers in .data? If those are in a loadable module, I guess you have
the same problem as with vmalloc() and vmap().

is_vmalloc_or_module_addr() would take care of both, not sure if there are
other examples that don't work. In theory it could be ioremap(), kmap_atomic()
or fixmap as well, but those seem less likely to matter here.

        Arnd
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help