| From 23153f4df6e9fda4a05826161fce5a011bc6558d Mon Sep 17 00:00:00 2001 |
| From: Alexander Duyck <alexander.h.duyck@linux.intel.com> |
| Date: Fri, 15 Feb 2019 14:44:18 -0800 |
| Subject: net: Do not allocate page fragments that are not skb aligned |
| |
| [ Upstream commit 3bed3cc4156eedf652b4df72bdb35d4f1a2a739d ] |
| |
| This patch addresses the fact that there are drivers, specifically tun, |
| that will call into the network page fragment allocators with buffer sizes |
| that are not cache aligned. Doing this could result in data alignment |
| and DMA performance issues as these fragment pools are also shared with the |
| skb allocator and any other devices that will use napi_alloc_frags or |
| netdev_alloc_frags. |
| |
| Fixes: ffde7328a36d ("net: Split netdev_alloc_frag into __alloc_page_frag and add __napi_alloc_frag") |
| Reported-by: Jann Horn <jannh@google.com> |
| Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/core/skbuff.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/net/core/skbuff.c |
| +++ b/net/core/skbuff.c |
| @@ -353,6 +353,8 @@ static void *__netdev_alloc_frag(unsigne |
| */ |
| void *netdev_alloc_frag(unsigned int fragsz) |
| { |
| + fragsz = SKB_DATA_ALIGN(fragsz); |
| + |
| return __netdev_alloc_frag(fragsz, GFP_ATOMIC); |
| } |
| EXPORT_SYMBOL(netdev_alloc_frag); |
| @@ -366,6 +368,8 @@ static void *__napi_alloc_frag(unsigned |
| |
| void *napi_alloc_frag(unsigned int fragsz) |
| { |
| + fragsz = SKB_DATA_ALIGN(fragsz); |
| + |
| return __napi_alloc_frag(fragsz, GFP_ATOMIC); |
| } |
| EXPORT_SYMBOL(napi_alloc_frag); |