Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp460352pxu; Tue, 6 Oct 2020 10:24:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx8ai8FIyBhBoY1yi97MDrKX63hxCY+h6m1bHT8+AwdKzE3yJAgZaJkCHDRcJGZ1WoevovB X-Received: by 2002:a05:6402:2076:: with SMTP id bd22mr6898352edb.197.1602005098487; Tue, 06 Oct 2020 10:24:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602005098; cv=none; d=google.com; s=arc-20160816; b=H+kP0djB6FVJKTU3RE51j8bM2No+t9j3lx1LaeD/84g4bbeeybGvggLNuXD4NsOFio aqhsymzerUKm92L/4L/oiNsN6XqxDBS/+v4KXnSDpki5eUlTaH3ksCbtOT3jXp3ySqNd f1bgvTU92BWgIGz4k1EGTQH1D8F/bl6T0Fjisq7sWg5GcjUy4PsJxosxStWsMgomOjSm 0ZI7xDw1/p8xhlB2bSaZHk7vBWjr9A4iE+gvLnzWqPkXHCrMFflGQu4+VMSXtGtRfzqH gs1RlBbjVb6RyWbgXMyrG5N4QGkOXGdk3IospVGmqRV1mtwxdAoIuq8IOOL1PHpYsH3e n+sg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from; bh=49V/4pK9xeQ5RzUhmEPKOduqibROIs6/nLUoH05dHoM=; b=QpN9YGT96xzFpIsCaTKNQo8TWDFizjPYG7hCDc0k7+JyTkX0OyiPRZldpYiP4BIRds l884O4q9O5KfyYl9lRgrpBX260Sfdk2iqBLQVqfhKfQK4ka83XpBmUuyparhu75gQcPp 0QKGdNBVtOkvNAnjdfYHQs+LVXzKLvi/rOMLZz5PIRbrmnZ+fLmcR7OmlWQsbDqYLvN7 s6C597QAto8lT9yG4AxhMLYIo9e71qg3fYzAAePapy9gRl48t9uhsmypg25g1XKrA2PC 2K9ztr0xm9+PeIouxLf7xceU45Rqi94o6dLWq3vLR1OMlIxgtgPpB6QiPXc+xupFv+1X EXug== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ispras.ru Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d10si2873812edt.247.2020.10.06.10.24.35; Tue, 06 Oct 2020 10:24:58 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ispras.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726442AbgJFRV2 (ORCPT + 99 others); Tue, 6 Oct 2020 13:21:28 -0400 Received: from mail.ispras.ru ([83.149.199.84]:58478 "EHLO mail.ispras.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725902AbgJFRV2 (ORCPT ); Tue, 6 Oct 2020 13:21:28 -0400 Received: from hellwig.intra.ispras.ru (unknown [10.10.2.182]) by mail.ispras.ru (Postfix) with ESMTPS id 6693B40A1DCE; Tue, 6 Oct 2020 17:21:25 +0000 (UTC) From: Evgeny Novikov To: Antoine Jacquet Cc: Evgeny Novikov , Mauro Carvalho Chehab , linux-usb@vger.kernel.org, linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, ldv-project@linuxtesting.org Subject: [PATCH] media: zr364xx: propagate errors from zr364xx_start_readpipe() Date: Tue, 6 Oct 2020 20:21:22 +0300 Message-Id: <20201006172122.25038-1-novikov@ispras.ru> X-Mailer: git-send-email 2.16.4 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org zr364xx_start_readpipe() can fail but callers do not care about that. This can result in various negative consequences. The patch adds missed error handling. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Evgeny Novikov --- drivers/media/usb/zr364xx/zr364xx.c | 31 ++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/drivers/media/usb/zr364xx/zr364xx.c b/drivers/media/usb/zr364xx/zr364xx.c index 8c670934d920..d65d3c2a034e 100644 --- a/drivers/media/usb/zr364xx/zr364xx.c +++ b/drivers/media/usb/zr364xx/zr364xx.c @@ -1327,6 +1327,7 @@ static int zr364xx_board_init(struct zr364xx_camera *cam) { struct zr364xx_pipeinfo *pipe = cam->pipe; unsigned long i; + int err; DBG("board init: %p\n", cam); memset(pipe, 0, sizeof(*pipe)); @@ -1359,9 +1360,8 @@ static int zr364xx_board_init(struct zr364xx_camera *cam) if (i == 0) { printk(KERN_INFO KBUILD_MODNAME ": out of memory. Aborting\n"); - kfree(cam->pipe->transfer_buffer); - cam->pipe->transfer_buffer = NULL; - return -ENOMEM; + err = -ENOMEM; + goto err_free; } else cam->buffer.dwFrames = i; @@ -1376,9 +1376,17 @@ static int zr364xx_board_init(struct zr364xx_camera *cam) /*** end create system buffers ***/ /* start read pipe */ - zr364xx_start_readpipe(cam); + err = zr364xx_start_readpipe(cam); + if (err) + goto err_free; + DBG(": board initialized\n"); return 0; + +err_free: + kfree(cam->pipe->transfer_buffer); + cam->pipe->transfer_buffer = NULL; + return err; } static int zr364xx_probe(struct usb_interface *intf, @@ -1575,10 +1583,19 @@ static int zr364xx_resume(struct usb_interface *intf) if (!cam->was_streaming) return 0; - zr364xx_start_readpipe(cam); + res = zr364xx_start_readpipe(cam); + if (res) + return res; + res = zr364xx_prepare(cam); - if (!res) - zr364xx_start_acquire(cam); + if (res) + goto err_prepare; + + zr364xx_start_acquire(cam); + return 0; + +err_prepare: + zr364xx_stop_readpipe(cam); return res; } #endif -- 2.26.2