From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergei Shtylyov Date: Thu, 19 Nov 2015 17:53:39 +0000 Subject: Re: [PATCH RFT v2] sh_eth: fix kernel oops in skb_put() Message-Id: <564E0CA3.3020304@cogentembedded.com> List-Id: References: <2611049.bTOQ0T0Nsl@wasted.cogentembedded.com> <87pp01jl9g.wl@dns1.atmark-techno.com> In-Reply-To: <87pp01jl9g.wl@dns1.atmark-techno.com> MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1254" Content-Transfer-Encoding: base64 To: Yasushi SHOJI Cc: netdev@vger.kernel.org, linux-sh@vger.kernel.org SGVsbG8uCgpPbiAxMC8yNy8yMDE1IDAxOjUyIEFNLCBZYXN1c2hpIFNIT0pJIHdyb3RlOgoKPj4g SW4gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbiB0aGUgZm9sbG93aW5nIGtlcm5lbCBvb3BzIG9jY3Vy czoKPj4KPj4gVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNl IGF0IHZpcnR1YWwgYWRkcmVzcyAwMDAwMDA1MAo+PiBwZ2QgPSA4NDkwYzAwMAo+PiBbMDAwMDAw NTBdICpwZ2RGNTFlODMxLCAqcHRlADAwMDAwMCwgKnBwdGUAMDAwMDAwCj4+IEludGVybmFsIGVy cm9yOiBPb3BzOiAxNyBbIzFdIFBSRUVNUFQgQVJNCj4+IE1vZHVsZXMgbGlua2VkIGluOgo+PiBD UFU6IDAgICAgTm90IHRhaW50ZWQgICgzLjQtYXQxNiAjOSkKPj4gUEMgaXMgYXQgc2tiX3B1dCsw eDEwLzB4OTgKPj4gTFIgaXMgYXQgc2hfZXRoX3BvbGwrMHgyYzgvMHhhMTAKPj4gcGMgOiBbPDgw MzVmNzgwPl0gICAgbHIgOiBbPDgwMjhiZjUwPl0gICAgcHNyOiA2MDAwMDExMwo+PiBzcCA6IDg0 ZWIxYTkwICBpcCA6IDg0ZWIxYWM4ICBmcCA6IDg0ZWIxYWM0Cj4+IHIxMDogMDAwMDAwM2YgIHI5 IDogMDAwMDA1ZWEgIHI4IDogMDAwMDAwMDAKPj4gcjcgOiAwMDAwMDAwMCAgcjYgOiA5NDA0NTNi MCAgcjUgOiAwMDAzMDAwMCAgcjQgOiA5MzgxYjE4MAo+PiByMyA6IDAwMDAwMDAwICByMiA6IDAw MDAwMDAwICByMSA6IDAwMDAwNWVhICByMCA6IDAwMDAwMDAwCj4+IEZsYWdzOiBuWkN2ICBJUlFz IG9uICBGSVFzIG9uICBNb2RlIFNWQ18zMiAgSVNBIEFSTSAgU2VnbWVudCB1c2VyCj4+IENvbnRy b2w6IDEwYzUzYzdkICBUYWJsZTogNDI0OGMwNTkgIERBQzogMDAwMDAwMTUKPj4gUHJvY2VzcyBr bG9nZCAocGlkOiAyMDQ2LCBzdGFjayBsaW1pdCA9IDB4ODRlYjAyZTgpCj4+IFsuLi5dCj4+Cj4+ IFRoaXMgaXMgYmVjYXVzZSBuZXRkZXZfYWxsb2Nfc2tiKCkgZmFpbHMgYW5kICdtZHAtPnJ4X3Nr YnVmZltlbnRyeV0nIGlzIGxlZnQKPj4gTlVMTCBidXQgc2hfZXRoX3J4KCkgbGF0ZXIgdXNlcyBp dCB3aXRob3V0IGNoZWNraW5nLiBBZGQgc3VjaCBjaGVjay4uLgo+Pgo+PiBSZXBvcnRlZC1ieTog WWFzdXNoaSBTSE9KSSA8eWFzaGlAYXRtYXJrLXRlY2huby5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6 IFNlcmdlaSBTaHR5bHlvdiA8c2VyZ2VpLnNodHlseW92QGNvZ2VudGVtYmVkZGVkLmNvbT4KPj4K Pj4gLS0tCj4+IFRoaXMgcGF0Y2ggaXMgYWdhaW5zdCBEYXZlTSdzICduZXQuZ2l0JyByZXBvLgo+ Pgo+PiAgIGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMgfCAgICA0ICsrLS0K Pj4gICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+Pgo+ PiBJbmRleDogbmV0L2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMKPj4gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Pj4gLS0tIG5ldC5vcmlnL2RyaXZlcnMvbmV0 L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMKPj4gKysrIG5ldC9kcml2ZXJzL25ldC9ldGhlcm5l dC9yZW5lc2FzL3NoX2V0aC5jCj4+IEBAIC0xNDgxLDYgKzE0ODEsNyBAQCBzdGF0aWMgaW50IHNo X2V0aF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqCj4+ICAgCQlpZiAobWRwLT5jZC0+c2hpZnRfcmQw KQo+PiAgIAkJCWRlc2Nfc3RhdHVzID4+PSAxNjsKPj4KPj4gKwkJc2tiID0gbWRwLT5yeF9za2J1 ZmZbZW50cnldOwo+PiAgIAkJaWYgKGRlc2Nfc3RhdHVzICYgKFJEX1JGUzEgfCBSRF9SRlMyIHwg UkRfUkZTMyB8IFJEX1JGUzQgfAo+PiAgIAkJCQkgICBSRF9SRlM1IHwgUkRfUkZTNiB8IFJEX1JG UzEwKSkgewo+PiAgIAkJCW5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwo+PiBAQCAtMTQ5NiwxMiAr MTQ5NywxMSBAQCBzdGF0aWMgaW50IHNoX2V0aF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqCj4+ICAg CQkJCW5kZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKPj4gICAJCQlpZiAoZGVzY19zdGF0 dXMgJiBSRF9SRlMxMCkKPj4gICAJCQkJbmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKPj4g LQkJfSBlbHNlIHsKPj4gKwkJfSBlbHNlCWlmIChza2IpIHsKPj4gICAJCQlpZiAoIW1kcC0+Y2Qt Pmh3X3N3YXApCj4+ICAgCQkJCXNoX2V0aF9zb2Z0X3N3YXAoCj4+ICAgCQkJCQlwaHlzX3RvX3Zp cnQoQUxJR04ocnhkZXNjLT5hZGRyLCA0KSksCj4+ICAgCQkJCQlwa3RfbGVuICsgMik7Cj4+IC0J CQlza2IgPSBtZHAtPnJ4X3NrYnVmZltlbnRyeV07Cj4+ICAgCQkJbWRwLT5yeF9za2J1ZmZbZW50 cnldID0gTlVMTDsKPj4gICAJCQlpZiAobWRwLT5jZC0+cnBhZGlyKQo+PiAgIAkJCQlza2JfcmVz ZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Cj4+Cj4KPiBUaGlzIGNlcnRhaW5seSBwcmV2ZW50cyBm cm9tIGEgYmFkIGFjY2VzcywgaG93ZXZlciwgc29tZSBvZGQgdGhpbmcgaXMKPiBnb2luZyBvbi4g IE9uY2UgSSBoaXQgYSBsb3cgbWVtb3J5IHNpdHVhdGlvbiB3aXRoIHRoaXMgcGF0Y2gsIG5ldHdv cmsKPiB0aG9yb3VnaC1wdXQgYW5kIHJlc3BvbnNlIGlzIHZlcnkgYmFkLgoKPiB0ZWxuZXQsIHBp bmcsIHdnZXQgdGFrZXMgbG9vbmcgdGltZS4KPgo+IFBJTkcgMTcyLjE2LjIuMTMgKDE3Mi4xNi4y LjEzKSA1Nig4NCkgYnl0ZXMgb2YgZGF0YS4KPiA2NCBieXRlcyBmcm9tIDE3Mi4xNi4yLjEzOiBp Y21wX3NlcT01IHR0bGQgdGltZT0wLjIyMyBtcwo+IDY0IGJ5dGVzIGZyb20gMTcyLjE2LjIuMTM6 IGljbXBfc2VxPTYgdHRsZCB0aW1lPTAuMTk1IG1zCj4gNjQgYnl0ZXMgZnJvbSAxNzIuMTYuMi4x MzogaWNtcF9zZXE9NyB0dGxkIHRpbWU9MC4yMDMgbXMKPiA2NCBieXRlcyBmcm9tIDE3Mi4xNi4y LjEzOiBpY21wX3NlcT04IHR0bGQgdGltZT0wLjIxOSBtcwo+IDY0IGJ5dGVzIGZyb20gMTcyLjE2 LjIuMTM6IGljbXBfc2VxPTkgdHRsZCB0aW1lPTAuMTY1IG1zCj4gNjQgYnl0ZXMgZnJvbSAxNzIu MTYuMi4xMzogaWNtcF9zZXEQIHR0bGQgdGltZT0wLjE3MSBtcwo+IDY0IGJ5dGVzIGZyb20gMTcy LjE2LjIuMTM6IGljbXBfc2VxPTEgdHRsZCB0aW1lkDIzIG1zCj4gNjQgYnl0ZXMgZnJvbSAxNzIu MTYuMi4xMzogaWNtcF9zZXE9MiB0dGxkIHRpbWWAMjIgbXMKPiA2NCBieXRlcyBmcm9tIDE3Mi4x Ni4yLjEzOiBpY21wX3NlcT0zIHR0bGQgdGltZXAxNCBtcwo+IDY0IGJ5dGVzIGZyb20gMTcyLjE2 LjIuMTM6IGljbXBfc2VxPTQgdHRsZCB0aW1lYDA2IG1zCj4KPiBJJ2xsIGludmVzdGlnYXRlIGl0 LgoKICAgIFNob2ppLXNhbiwgY2FuIEkgcHVzaCB0aGlzIHBhdGNoIHRvIG5ldC5naXQ/IEkgZG91 YnQgdGhhdCBpdCBoYXMgaWxsIAplZmZlY3RzIGluIGl0c2VsZiAtLSB0aGUgcmVhc29uIG9mIHRo ZSBzbG93ZG93biB5b3UncmUgc2VlaW5nIHNob3VsZCBiZSAKc29tZXdoZXJlIGVsc2UuLi4KCk1C UiwgU2VyZ2VpCgotLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGlu ZSAidW5zdWJzY3JpYmUgbGludXgtc2giIGluCnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpv cmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2Vy Lmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergei Shtylyov Subject: Re: [PATCH RFT v2] sh_eth: fix kernel oops in skb_put() Date: Thu, 19 Nov 2015 20:53:39 +0300 Message-ID: <564E0CA3.3020304@cogentembedded.com> References: <2611049.bTOQ0T0Nsl@wasted.cogentembedded.com> <87pp01jl9g.wl@dns1.atmark-techno.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Cc: netdev@vger.kernel.org, linux-sh@vger.kernel.org To: Yasushi SHOJI Return-path: Received: from mail-lb0-f175.google.com ([209.85.217.175]:36487 "EHLO mail-lb0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757405AbbKSRxo (ORCPT ); Thu, 19 Nov 2015 12:53:44 -0500 Received: by lbblt2 with SMTP id lt2so48382913lbb.3 for ; Thu, 19 Nov 2015 09:53:42 -0800 (PST) In-Reply-To: <87pp01jl9g.wl@dns1.atmark-techno.com> Sender: netdev-owner@vger.kernel.org List-ID: Hello. On 10/27/2015 01:52 AM, Yasushi SHOJI wrote: >> In a low memory situation the following kernel oops occurs: >> >> Unable to handle kernel NULL pointer dereference at virtual address 00000050 >> pgd = 8490c000 >> [00000050] *pgd=4651e831, *pte=00000000, *ppte=00000000 >> Internal error: Oops: 17 [#1] PREEMPT ARM >> Modules linked in: >> CPU: 0 Not tainted (3.4-at16 #9) >> PC is at skb_put+0x10/0x98 >> LR is at sh_eth_poll+0x2c8/0xa10 >> pc : [<8035f780>] lr : [<8028bf50>] psr: 60000113 >> sp : 84eb1a90 ip : 84eb1ac8 fp : 84eb1ac4 >> r10: 0000003f r9 : 000005ea r8 : 00000000 >> r7 : 00000000 r6 : 940453b0 r5 : 00030000 r4 : 9381b180 >> r3 : 00000000 r2 : 00000000 r1 : 000005ea r0 : 00000000 >> Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user >> Control: 10c53c7d Table: 4248c059 DAC: 00000015 >> Process klogd (pid: 2046, stack limit = 0x84eb02e8) >> [...] >> >> This is because netdev_alloc_skb() fails and 'mdp->rx_skbuff[entry]' is left >> NULL but sh_eth_rx() later uses it without checking. Add such check... >> >> Reported-by: Yasushi SHOJI >> Signed-off-by: Sergei Shtylyov >> >> --- >> This patch is against DaveM's 'net.git' repo. >> >> drivers/net/ethernet/renesas/sh_eth.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> Index: net/drivers/net/ethernet/renesas/sh_eth.c >> =================================================================== >> --- net.orig/drivers/net/ethernet/renesas/sh_eth.c >> +++ net/drivers/net/ethernet/renesas/sh_eth.c >> @@ -1481,6 +1481,7 @@ static int sh_eth_rx(struct net_device * >> if (mdp->cd->shift_rd0) >> desc_status >>= 16; >> >> + skb = mdp->rx_skbuff[entry]; >> if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 | >> RD_RFS5 | RD_RFS6 | RD_RFS10)) { >> ndev->stats.rx_errors++; >> @@ -1496,12 +1497,11 @@ static int sh_eth_rx(struct net_device * >> ndev->stats.rx_missed_errors++; >> if (desc_status & RD_RFS10) >> ndev->stats.rx_over_errors++; >> - } else { >> + } else if (skb) { >> if (!mdp->cd->hw_swap) >> sh_eth_soft_swap( >> phys_to_virt(ALIGN(rxdesc->addr, 4)), >> pkt_len + 2); >> - skb = mdp->rx_skbuff[entry]; >> mdp->rx_skbuff[entry] = NULL; >> if (mdp->cd->rpadir) >> skb_reserve(skb, NET_IP_ALIGN); >> > > This certainly prevents from a bad access, however, some odd thing is > going on. Once I hit a low memory situation with this patch, network > thorough-put and response is very bad. > telnet, ping, wget takes loong time. > > PING 172.16.2.13 (172.16.2.13) 56(84) bytes of data. > 64 bytes from 172.16.2.13: icmp_seq=5 ttl=64 time=0.223 ms > 64 bytes from 172.16.2.13: icmp_seq=6 ttl=64 time=0.195 ms > 64 bytes from 172.16.2.13: icmp_seq=7 ttl=64 time=0.203 ms > 64 bytes from 172.16.2.13: icmp_seq=8 ttl=64 time=0.219 ms > 64 bytes from 172.16.2.13: icmp_seq=9 ttl=64 time=0.165 ms > 64 bytes from 172.16.2.13: icmp_seq=10 ttl=64 time=0.171 ms > 64 bytes from 172.16.2.13: icmp_seq=1 ttl=64 time=9023 ms > 64 bytes from 172.16.2.13: icmp_seq=2 ttl=64 time=8022 ms > 64 bytes from 172.16.2.13: icmp_seq=3 ttl=64 time=7014 ms > 64 bytes from 172.16.2.13: icmp_seq=4 ttl=64 time=6006 ms > > I'll investigate it. Shoji-san, can I push this patch to net.git? I doubt that it has ill effects in itself -- the reason of the slowdown you're seeing should be somewhere else... MBR, Sergei