From patchwork Tue Sep 19 16:15:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Anderson X-Patchwork-Id: 815637 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="Z5+zjoq9"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xxSfs2DJ2z9ryT for ; Wed, 20 Sep 2017 02:16:21 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751572AbdISQP7 (ORCPT ); Tue, 19 Sep 2017 12:15:59 -0400 Received: from mail-pf0-f169.google.com ([209.85.192.169]:54379 "EHLO mail-pf0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751283AbdISQPy (ORCPT ); Tue, 19 Sep 2017 12:15:54 -0400 Received: by mail-pf0-f169.google.com with SMTP id d187so51052pfg.11 for ; Tue, 19 Sep 2017 09:15:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3PaDT8Wvbo5xkZbFteLaVBGW5gTPtYgKg1KIPP3qlss=; b=Z5+zjoq9uMPTERRNQ9ifL3GCp2jnc+PqiEndZ3AGBf4Aq6Dg2JAawgzgtACyxeSWC3 0imd2FxDVGPujBNzSQ9Xlf4MksuJ6BeBVaPFeh63EsqccGOXP5v9PfOxKXFXVHatzIqO RMI4l1vbdcuiJ2k8r21X+evXq8LmBtx6umABI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3PaDT8Wvbo5xkZbFteLaVBGW5gTPtYgKg1KIPP3qlss=; b=OBn972OaT7wiikmGxNvcbAajVMbL0zaJKVwjtH7T+vT74PsL/pGBknKikmaKSbpM1V nlgIfJ3eqx1BZFhjZOD1Yq12T3CLl+nH1VJSmmvwZILUJQEdcje1oNtNpGgoZ4RVeO3r mJi/ZMt9/3BM9kGSxOKqbLPGDI+ET4xE0+uUy30ZTv43uShfcabNc+FDRG1JhjqZ+kNZ btDmB+WPoycRbEgfazcRyBrtMcA11a1E9f2cFKJ9+GLfK3qhGhguIaYeN8vEzUsV8DPE 5azUXbezteY/XFPHyVx76IguyqoLCwmKvQG6Ld56RC2zFTXfBf2TelbXmvjDH4l2ON3e BGmA== X-Gm-Message-State: AHPjjUhjLMDov0qNYCluO+L5ujp11+dXGvWvOUH0TNGEUCq5dLrZFTpg rInotJ92mfV/1u7HikPjqDdEEA== X-Google-Smtp-Source: AOwi7QA3Kk2EKBNaywYxXIvVv9FNj+5Ap+v0yRaXq+OyzUuFESnlHRJzSA+vFdlHK0evMKcH7kQ0Mw== X-Received: by 10.98.178.204 with SMTP id z73mr1787842pfl.107.1505837754449; Tue, 19 Sep 2017 09:15:54 -0700 (PDT) Received: from tictac.mtv.corp.google.com ([172.22.112.154]) by smtp.gmail.com with ESMTPSA id o128sm5030751pga.5.2017.09.19.09.15.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 19 Sep 2017 09:15:53 -0700 (PDT) From: Douglas Anderson To: Oliver Neukum Cc: groeck@chromium.org, grundler@chromium.org, Douglas Anderson , netdev@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 3/3] usbnet: Fix memory leak when rx_submit() fails Date: Tue, 19 Sep 2017 09:15:22 -0700 Message-Id: <20170919161522.995-3-dianders@chromium.org> X-Mailer: git-send-email 2.14.1.690.gbb1197296e-goog In-Reply-To: <20170919161522.995-1-dianders@chromium.org> References: <20170919161522.995-1-dianders@chromium.org> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If rx_submit() returns an error code then nobody calls usb_free_urb(). That means it's leaked. NOTE: This problem was found solely by code inspection and not due to any failing test cases. Signed-off-by: Douglas Anderson --- drivers/net/usb/usbnet.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index e72547d8d0e6..4c067aaeea5a 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -1182,9 +1182,12 @@ usbnet_deferred_kevent (struct work_struct *work) usb_free_urb(urb); goto fail_lowmem; } - if (rx_submit (dev, urb, GFP_KERNEL) == - -ENOLINK) - resched = 0; + status = rx_submit (dev, urb, GFP_KERNEL); + if (status) { + usb_free_urb(urb); + if (status == -ENOLINK) + resched = 0; + } usb_autopm_put_interface(dev->intf); fail_lowmem: if (resched)