Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp4387088imu; Tue, 29 Jan 2019 00:13:41 -0800 (PST) X-Google-Smtp-Source: ALg8bN5x+2flw/vL9tTvXPadPwQeOIkNWDyOuiqjCt/y/CJaZYIxzhsutosJlDy0qw1K8Fu+dFVR X-Received: by 2002:a63:9041:: with SMTP id a62mr22290457pge.163.1548749621545; Tue, 29 Jan 2019 00:13:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548749621; cv=none; d=google.com; s=arc-20160816; b=bzS3YFuEQrZVAghnUFrAzSBmW55W8UuAN9ePn1sl3lPD1F28E2rFZRuaBAtFluem+c prmozZDXnobJRaNDoBgriEutRBvIhWK/ehV0J/fIvq7Uqo+90wUF7YgI8us8wi278xAW /Uszz9PiE//X1gwGGAnycCsSuwxH/7dhgZdRbKQDo5ko9nRvvQvB0p+130NBvVg1emSE 5dFj/xooftYe5/cY1zghnIBv0uTx8qku55qvKRehgPmZ9kvs83uTUZE/Mt2dd1QLmXWI hBy688a+RFdrRkz5W9hqxwpNk6f9M6QFiHoe1qZy14cZli++xAM1FX/JdHlj7hBwy29S bWkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=KZKPNVLlmi9MM1fC6Evv97EB/zIPVuPe5u1P5j2SJjY=; b=Q9G0s0rHoE/EkvhPbktOhlqOdfFR3uODX2xeAjJZrPTOlF4B7Q0ZNstontTKpP7+cl 0USp8hjPc0UZNamHehGTQG25+hWo4iTAoy4vdkRn6KuvHoAJaNTkIkCRBUnMBvOSLz1q Cit9fLcp4LS2R4DmjPIK4WpSlyFAyEIQFR50vt/e2XYS86/G0oO+rJEb82Q0I+syEgII cDMTlOXPFCYnr131Wj3xePCedu2E+Mo8/HbiwOzQj66o2oAJ/MKzFrkaLHeMiTAUkUrE ZAz4ABf1KpUuvq+RAVUCXjezlXKSFWc9s5/wn2PDuzZ3OHEmuPf2ZFO0Hptid0wz3g3z 31qA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=N3aZVUHF; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i17si697892pgk.233.2019.01.29.00.13.26; Tue, 29 Jan 2019 00:13:41 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=N3aZVUHF; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727383AbfA2IMk (ORCPT + 99 others); Tue, 29 Jan 2019 03:12:40 -0500 Received: from userp2120.oracle.com ([156.151.31.85]:46016 "EHLO userp2120.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726072AbfA2IMk (ORCPT ); Tue, 29 Jan 2019 03:12:40 -0500 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.22/8.16.0.22) with SMTP id x0T896Ia175928; Tue, 29 Jan 2019 08:12:35 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc : subject : message-id : references : mime-version : content-type : in-reply-to; s=corp-2018-07-02; bh=KZKPNVLlmi9MM1fC6Evv97EB/zIPVuPe5u1P5j2SJjY=; b=N3aZVUHFu4AO5rzApetElatEsC0PGeAz9j7MFQXlkun3pzSL3qFD0AiUxRJkt7cV0uzB D9MbTfdV52epp3VBz1VmjE+Nu/QQ176ZakZf0anqZwfKL/N0zy+vvjaiGEGK8B7CpV5a BFG5ZZsL7h4CuULkusOJxZbObj0HJxOLLZOHQgJ5A16HSSLi69DoNu15Y+O38HrS8NGk uXF/JzfnVAGCQ6NT2whbGRR7DyMuHxhwY4x0F/rDrh+cnPFquMzEeNKHu1mOEFpBE2D3 fY/Woo2x+5LCm18+kYLPOqYcwPNkSwkyqGVDXQx9/z0OQj/ZXaK9Wwvu5Z++PwYxxx5S OQ== Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp2120.oracle.com with ESMTP id 2q8g6r2ngp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 29 Jan 2019 08:12:35 +0000 Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.14.4/8.14.4) with ESMTP id x0T8CTqe013103 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 29 Jan 2019 08:12:29 GMT Received: from abhmp0009.oracle.com (abhmp0009.oracle.com [141.146.116.15]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id x0T8CSrE006274; Tue, 29 Jan 2019 08:12:28 GMT Received: from kadam (/197.157.0.48) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 29 Jan 2019 00:12:28 -0800 Date: Tue, 29 Jan 2019 11:12:18 +0300 From: Dan Carpenter To: Todd Kjos Cc: tkjos@google.com, gregkh@linuxfoundation.org, arve@android.com, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, maco@google.com, joel@joelfernandes.org, kernel-team@android.com Subject: Re: [PATCH 1/7] binder: create userspace-to-binder-buffer copy function Message-ID: <20190129081218.GL1795@kadam> References: <20190129004934.85885-1-tkjos@google.com> <20190129004934.85885-2-tkjos@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190129004934.85885-2-tkjos@google.com> User-Agent: Mutt/1.9.4 (2018-02-28) X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9150 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901290062 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jan 28, 2019 at 04:49:28PM -0800, Todd Kjos wrote: > +/** > + * binder_alloc_copy_user_to_buffer() - copy src user to tgt user > + * @alloc: binder_alloc for this proc > + * @buffer: binder buffer to be accessed > + * @buffer_offset: offset into @buffer data > + * @from: userspace pointer to source buffer > + * @bytes: bytes to copy > + * > + * Copy bytes from source userspace to target buffer. > + * > + * Return: bytes remaining to be copied > + */ > +unsigned long > +binder_alloc_copy_user_to_buffer(struct binder_alloc *alloc, > + struct binder_buffer *buffer, > + binder_size_t buffer_offset, > + const void __user *from, > + size_t bytes) > +{ > + if (!check_buffer(alloc, buffer, buffer_offset, bytes)) > + return bytes; > + > + while (bytes) { > + unsigned long size; > + unsigned long ret; > + struct page *page; > + pgoff_t pgoff; > + void *kptr; > + > + page = binder_alloc_get_page(alloc, buffer, > + buffer_offset, &pgoff); > + size = min(bytes, (size_t)(PAGE_SIZE - pgoff)); This code has so much more casting than necessary. To me casting says that we haven't got the types correct or something. I've just pulled this function out as an example really, but none of the casts here are required... This could just be: size = min(bytes, PAGE_SIZE - pgoff); Btw, if you really need to do a cast inside a min() (you don't in this cast) then use min_t(). > + kptr = (void *)((uintptr_t)kmap(page) + pgoff); This would be a lot cleaner as: kptr = kmap(page) + pgoff; > + ret = copy_from_user(kptr, (const void __user *)(uintptr_t)from, > + size); Remove the cast: ret = copy_from_user(kptr, from, size); > + kunmap(page); > + if (ret) > + return bytes - size + ret; > + bytes -= size; > + from = (void __user *)(uintptr_t)from + size; Remove the cast: from += size; > + buffer_offset += size; > + } > + return 0; > +} regards, dan carpenter