Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp801075ybk; Wed, 13 May 2020 13:30:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwy4irUnwryvKXysJC6m5iwPl17MgvWylgpS8SdPydfJUGrWsvWnn0V/6wo/XGe67WsAECi X-Received: by 2002:aa7:ca11:: with SMTP id y17mr1236125eds.87.1589401843734; Wed, 13 May 2020 13:30:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589401843; cv=none; d=google.com; s=arc-20160816; b=x+LH79IV89pYAyEQHozj29yLaRq/qaBztb9iLObWoRlOpRHCt7skwfVFQf5DjdeeHn cj6YJHnLySs7w5GIysBkfAr/LUO+jjmKrreVoVB3K3bfo2fUWmc8GYbM6OZivengxG9G 0ts95Zr1HbJW+v+8A2s2upNjP4/bYz29JVMNQ36l7/gaf/rC3v6yKDjP3w/aiLKc+tgU a5qiUpMpIrC8w3IVb5KwCjCwhHX+iQZm2xTdDYoxcE5kGunWKxQZJ8h7u7OrhD0e3icd RDNRhT3AkLcHBQVo6FQM433pjwoM+zkVmCvkz4ezZGgLTSlNL4ojNT1Fk0h+Ye+C4LLn lcRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=oFenwZnHRrDzsca0qZN/elh7JQBsl0QEvPsQ595Gw8k=; b=VjViQ6f+N0dP7FT3mf8nWJwl5Iw31cuStvdNJ5DlbCbC2HZz2/vdx2r+Y+QS/jSVs7 jV3PkSRcDblWfW+hWt/lhxnE/6XD/SfHzJLrqcnORsggQyKGC/sxoKbHx5HUzCm2yobv GqxcCTlmgXMW7E3mzSW6yKdOqN7SSkCvbaV9fDxcqM1KmXFtihvtoytMz+57gQ8/bPto GVft4ouzR6N7/n+fqDJ3znnAZ768+sDcQ0U1Ft7eE63yeVj2Te7wM/657J6/ULVdBQpk sSZL7QGlBnqZftrhRLdBnl2wg/CSa6WatbL60cyvZB3ERqmcYNRnZmvun9KNn7J395VN 3JkQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1lrubWQe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y13si417436edq.430.2020.05.13.13.30.20; Wed, 13 May 2020 13:30:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1lrubWQe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733122AbgEMJsq (ORCPT + 99 others); Wed, 13 May 2020 05:48:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:47280 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733112AbgEMJso (ORCPT ); Wed, 13 May 2020 05:48:44 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C9B9D206F5; Wed, 13 May 2020 09:48:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589363323; bh=4LdK0UMZKV88NR0FednH6zsZI4bJjPkcrrE6fGKiOuo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=1lrubWQeZYSt9AAfEUK0GGyusMFxvvrpZGWU3PG27p1rc9n3waX6ebzBxrUHXfyqu X0EVw1QlTn7+Bd1kR87nmz0NpaES/TV7RjfPxtzQdd0BeD9NSXbU9Bar4oYXlYckov MIEO8r1P0cDxttFlU4LhBPpGW+VO65TIeLJFLwyQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Eric Dumazet , syzbot , Cong Wang , "David S. Miller" Subject: [PATCH 5.4 27/90] sch_choke: avoid potential panic in choke_reset() Date: Wed, 13 May 2020 11:44:23 +0200 Message-Id: <20200513094411.400502329@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200513094408.810028856@linuxfoundation.org> References: <20200513094408.810028856@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Eric Dumazet [ Upstream commit 8738c85c72b3108c9b9a369a39868ba5f8e10ae0 ] If choke_init() could not allocate q->tab, we would crash later in choke_reset(). BUG: KASAN: null-ptr-deref in memset include/linux/string.h:366 [inline] BUG: KASAN: null-ptr-deref in choke_reset+0x208/0x340 net/sched/sch_choke.c:326 Write of size 8 at addr 0000000000000000 by task syz-executor822/7022 CPU: 1 PID: 7022 Comm: syz-executor822 Not tainted 5.7.0-rc1-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Call Trace: __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0x188/0x20d lib/dump_stack.c:118 __kasan_report.cold+0x5/0x4d mm/kasan/report.c:515 kasan_report+0x33/0x50 mm/kasan/common.c:625 check_memory_region_inline mm/kasan/generic.c:187 [inline] check_memory_region+0x141/0x190 mm/kasan/generic.c:193 memset+0x20/0x40 mm/kasan/common.c:85 memset include/linux/string.h:366 [inline] choke_reset+0x208/0x340 net/sched/sch_choke.c:326 qdisc_reset+0x6b/0x520 net/sched/sch_generic.c:910 dev_deactivate_queue.constprop.0+0x13c/0x240 net/sched/sch_generic.c:1138 netdev_for_each_tx_queue include/linux/netdevice.h:2197 [inline] dev_deactivate_many+0xe2/0xba0 net/sched/sch_generic.c:1195 dev_deactivate+0xf8/0x1c0 net/sched/sch_generic.c:1233 qdisc_graft+0xd25/0x1120 net/sched/sch_api.c:1051 tc_modify_qdisc+0xbab/0x1a00 net/sched/sch_api.c:1670 rtnetlink_rcv_msg+0x44e/0xad0 net/core/rtnetlink.c:5454 netlink_rcv_skb+0x15a/0x410 net/netlink/af_netlink.c:2469 netlink_unicast_kernel net/netlink/af_netlink.c:1303 [inline] netlink_unicast+0x537/0x740 net/netlink/af_netlink.c:1329 netlink_sendmsg+0x882/0xe10 net/netlink/af_netlink.c:1918 sock_sendmsg_nosec net/socket.c:652 [inline] sock_sendmsg+0xcf/0x120 net/socket.c:672 ____sys_sendmsg+0x6bf/0x7e0 net/socket.c:2362 ___sys_sendmsg+0x100/0x170 net/socket.c:2416 __sys_sendmsg+0xec/0x1b0 net/socket.c:2449 do_syscall_64+0xf6/0x7d0 arch/x86/entry/common.c:295 Fixes: 77e62da6e60c ("sch_choke: drop all packets in queue during reset") Signed-off-by: Eric Dumazet Reported-by: syzbot Cc: Cong Wang Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/sched/sch_choke.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/net/sched/sch_choke.c +++ b/net/sched/sch_choke.c @@ -323,7 +323,8 @@ static void choke_reset(struct Qdisc *sc sch->q.qlen = 0; sch->qstats.backlog = 0; - memset(q->tab, 0, (q->tab_mask + 1) * sizeof(struct sk_buff *)); + if (q->tab) + memset(q->tab, 0, (q->tab_mask + 1) * sizeof(struct sk_buff *)); q->head = q->tail = 0; red_restart(&q->vars); }