Messages in this thread | | | From | Arnd Bergmann <> | Date | Tue, 27 Jul 2021 15:18:58 +0200 | Subject | Re: [PATCH] virtio-console: avoid DMA from vmalloc area |
| |
On Tue, Jul 27, 2021 at 3:13 PM Xianting Tian <xianting.tian@linux.alibaba.com> wrote: > @@ -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
| |