Received: by 2002:a05:6512:3d0e:0:0:0:0 with SMTP id d14csp348873lfv; Wed, 13 Apr 2022 05:32:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvyPyMkuzOjpeDKgOYKuPn28Zniz5UoVjJ5feMUPSk0ehjO+fwePj7Gc8yxuL6bQFJza3D X-Received: by 2002:a17:907:c28:b0:6e8:80f5:31d1 with SMTP id ga40-20020a1709070c2800b006e880f531d1mr15856453ejc.646.1649853139665; Wed, 13 Apr 2022 05:32:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649853139; cv=none; d=google.com; s=arc-20160816; b=nuHdSKY3uRN8VmRtwcjcm/v0RUgEZs/hRRFAfEO0RcTtm+2qS+IeiABB00MbIvhF93 QEmiKRb8aP1c330VAATjtmOFOQO/XuMfUTTgag0fCxU+duls50r7rNcWd9jjsfMZgOxM OoeVc8NPN6wZHzW3G1O57Bjw9jeIEWsXH/s//aR+IylZF5HmhzBI+KvZ7nKE0uMCSRFv yVCZBJ/uB/q3j5/okkS5cxulSG0b00FlakHSURg6b+dWzf/fVtE//HrjtQAYnYMBsjjR pgyahi0dVUPURRH3y5RRdE6HoDaQ0j6ro3BdD7h5ndLnthkmJGttI/AQ8xtYMDQcTih1 T75A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=2+UMpbKbLENSxW7pS33bDBIsAO/reHm8FRiKjyME/aU=; b=Ci1AMmigOgHK4HCMEdIhKNU/1umGl1oMifcSBjHZio6FawapAg/UTunVzScDUGysxk quHOuFAWYzpzSQ/GJAYqy55gOzRb2qpDvTYFUnMiFwRbZZ8rJv3X+NvcBUGhMjNOJS69 FLC5irFDxm0Z4q+PV9aGxgPz8rGygsk/5D745FgIr0p7cMeTO2/V1kZqSTiqgkhk41xq 5JCkfgWd5h9IuypCpvkbw6y2YnJVSWC5HeSqbf4IxTT+YnBRHXTdrOcsM2WGoyj5kvzp S94A/uAMoqjs8KPYOEyXrJ3HrKDn5yGbYfsF3CuL1lXmcLt4EQMK0miB2CLV1ZXnNec9 XQPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=knp9y3l3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y14-20020a50ce0e000000b0041cd9ecd96asi1350262edi.625.2022.04.13.05.31.50; Wed, 13 Apr 2022 05:32:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=knp9y3l3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234811AbiDMKCk (ORCPT + 99 others); Wed, 13 Apr 2022 06:02:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55952 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234821AbiDMKCa (ORCPT ); Wed, 13 Apr 2022 06:02:30 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 20968220C8 for ; Wed, 13 Apr 2022 03:00:09 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id D28EFB821C6 for ; Wed, 13 Apr 2022 10:00:07 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4975FC385A3; Wed, 13 Apr 2022 10:00:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649844006; bh=bFHLd2on4EXVWdfSMTSSo6pgffdVcKne9F5/ux58zCI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=knp9y3l34Jtwnj3uW4sH03VRLSK+6L5dK8UYSnUp+jGgYXNc0tCe7IthmpOVod9Iq ol8597b1wpABiLepJqHMOXH1/UidF230xZ00U/afrZlorK+4zH1L8RH+KMkwr3e1yC sCxGE78c4ZXIVBFePGw5LmghURzQzyFZDzBxyPNY= Date: Wed, 13 Apr 2022 12:00:03 +0200 From: Greg KH To: Alessandro Astone Cc: tkjos@android.com, brauner@kernel.org, arve@android.com, linux-kernel@vger.kernel.org, maco@android.com, Joel Fernandes , Hridya Valsaraju , Suren Baghdasaryan Subject: Re: [PATCH] binder: Address corner cases in deferred copy and fixup Message-ID: References: <20220413085428.20367-1-ales.astone@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220413085428.20367-1-ales.astone@gmail.com> X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Apr 13, 2022 at 10:54:27AM +0200, Alessandro Astone wrote: > When handling BINDER_TYPE_FDA object we are pushing a parent fixup > with a certain skip_size but no scatter-gather copy object, since > the copy is handled standalone. > If BINDER_TYPE_FDA is the last children the scatter-gather copy > loop will never stop to skip it, thus we are left with an item in > the parent fixup list. This will trigger the BUG_ON(). > > Furthermore, it is possible to receive BINDER_TYPE_FDA object > with num_fds=0 which will confuse the scatter-gather code. > > In the android userspace I could only find these usecases in the > libstagefright OMX implementation, so it might be that they're > doing something very weird, but nonetheless the kernel should not > panic about it. > > Fixes: 09184ae9b575 ("binder: defer copies of pre-patched txn data") > Signed-off-by: Alessandro Astone > --- > drivers/android/binder.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/drivers/android/binder.c b/drivers/android/binder.c > index 8351c5638880..18ad6825ba30 100644 > --- a/drivers/android/binder.c > +++ b/drivers/android/binder.c > @@ -2295,7 +2295,7 @@ static int binder_do_deferred_txn_copies(struct binder_alloc *alloc, > { > int ret = 0; > struct binder_sg_copy *sgc, *tmpsgc; > - struct binder_ptr_fixup *pf = > + struct binder_ptr_fixup *tmppf, *pf = Just make this a new line: struct binder_ptr_fixup *tmppf; above the existing line. > list_first_entry_or_null(pf_head, struct binder_ptr_fixup, > node); > > @@ -2349,7 +2349,11 @@ static int binder_do_deferred_txn_copies(struct binder_alloc *alloc, > list_del(&sgc->node); > kfree(sgc); > } > - BUG_ON(!list_empty(pf_head)); So you are hitting this BUG_ON() today? > + list_for_each_entry_safe(pf, tmppf, pf_head, node) { > + BUG_ON(pf->skip_size == 0); > + list_del(&pf->node); > + kfree(pf); > + } > BUG_ON(!list_empty(sgc_head)); > > return ret > 0 ? -EINVAL : ret; > @@ -2486,6 +2490,9 @@ static int binder_translate_fd_array(struct list_head *pf_head, > struct binder_proc *proc = thread->proc; > int ret; > > + if (fda->num_fds == 0) > + return 0; Why return 0? This feels like a separate issue from above, should this be 2 different commits? thanks, greg k-h