Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp4075356ybl; Mon, 27 Jan 2020 16:09:20 -0800 (PST) X-Google-Smtp-Source: APXvYqzE/k38lG/CjyE0ZklcBZO/W4tPkgqco5nHhPYXYbdSFoJz3BFVN0kRd9wm+a9cjQbQowhc X-Received: by 2002:aca:1713:: with SMTP id j19mr1148599oii.160.1580170160814; Mon, 27 Jan 2020 16:09:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580170160; cv=none; d=google.com; s=arc-20160816; b=J4bfSdbDsTd3ihqBJ6sLxGTOmhNthrKfG82S0fazMj3wCc6qzcgmAQpBnmyrDB8auZ huaGAfILKvh0t/QEG38M2t8PHazXU7HoI8zum1dKixoOGkiOy+/eGIAvLAf95GPdTM+f diDs1XcyUnCCT/xFThzdrauBKU50B7oNwBtKZuBzE2/Nw4BUXgNOLiLX1HWbXl3OgGzT 0b9Akhe1BkjbO7sRkM2+Up0y0ylYj22Bgvem1kBr3apzvYjpgySmGQ3QIQoIxyZ89PHX mHtLqqJg4YnSfRj1GQZHaB/TnG3vsvx9eBSYstUzdiC2C/Nd/kocEGrxD8NKqyvLos2H KgnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=DjVrjeD3QJ+6PJ6qKZcWEoHjMRPEf3uOEfUKJ8JnHLI=; b=jdjbvuW/kuOXzRwW6V5oAtTlSdNyhpuyi5jGUpi7Vs09sUQkufqYkXtlDnS2YzmLfz v39ap+cyq/g/2gwWXtBUoVoTO6kqL1YxLotCP1Vz1Sx+P3Z9ptZiu7bw3o4/Hf7k6ssw +8g7ZYCa/7yoSGEL86ICj1RomcV8HU/g0m2ciI9/9gqL/Iy2jDjOp+0zHhyiVy+LD4m9 pXhV8EglW654XK6rfDxi2BUjfHIveHkuAKHY2PK/HdOY/Xh9Bw3LEbYcKg1Ef+JLR5ci JKRb+iJEn+dhrgPRGG1PpLpZgCOSTxObljfVlHJ5mBP7gKns2BukH9/Wd5SyvVwOYVNz UEWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=jgylNYI7; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y127si4657570oiy.250.2020.01.27.16.09.03; Mon, 27 Jan 2020 16:09:20 -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=@google.com header.s=20161025 header.b=jgylNYI7; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726267AbgA1AGF (ORCPT + 99 others); Mon, 27 Jan 2020 19:06:05 -0500 Received: from mail-wr1-f66.google.com ([209.85.221.66]:39306 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725955AbgA1AGF (ORCPT ); Mon, 27 Jan 2020 19:06:05 -0500 Received: by mail-wr1-f66.google.com with SMTP id y11so13902096wrt.6 for ; Mon, 27 Jan 2020 16:06:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=DjVrjeD3QJ+6PJ6qKZcWEoHjMRPEf3uOEfUKJ8JnHLI=; b=jgylNYI7FFPqPl0yj8XLVgEzfctkkIK1IgEcYRwwP0urotQmY6b1+D0B4p5fz50qyk pqvqBZhIvuAPBLybcLTvgXwi8xJK5DqnIYila8oWZlL1mnJsgr8/6IrHpJwjq/CUTrtb rEsc6LloiI6vjH+s/ob2yHadqW7/XTvB5ZFQe6GrVz4DZk9Lj0QKlTXTo8Y8ZItdmvol VLh9PoXSR4AH8n9sj6MMSvs1W+E3xvYrsJbk349ogXmvotRZ2OqsvrHJ4Vfv1yVJ91qL GtP3GvOO/lw4RKyew/krYJZO1hPtz/JvOG82GcMrBHJA8ikNNHFWC6lq6aTgdh/6le4/ 4m2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=DjVrjeD3QJ+6PJ6qKZcWEoHjMRPEf3uOEfUKJ8JnHLI=; b=VNRsGrfO18vOsGibmhyhdm/JZ3xqeOX+EmKXOabbu9PpRQq72vUQJZRlHSddw6Ct8b zvN+8P6D6+lNN3t47VFNH3zou1627TgooVI6xV/zO5FVRE4gjQflGUYGr4TmNTDTgcDb aciOhpJtsEBQ0relEI0g5ZYQ0CKBpjxfEV1VIR54KN23IyTlmEp37U17qqWefuWzaCso o/IOEO9gSdbsYkH50Qqo8QBUpUCtQC3ftEzGFtnvWfrnhHIGvn27QgVXXIzJuj9Yf+8p roHRYNBmTHChYRIydYIBMZeeitRV+M4gl7G4zqjW+KWRA878dwm5YT8OX2QTXSdBEQc3 TiKQ== X-Gm-Message-State: APjAAAX3Os2L2j3bayMDEMK6qOc+XEXvXAPi82oldwS16qciXWYFSOM1 8sa+ILRsDy8QJ6L3RMKX5Wsc0gX4mpuYV0g/Cv58DQ== X-Received: by 2002:adf:f508:: with SMTP id q8mr25440974wro.334.1580169961494; Mon, 27 Jan 2020 16:06:01 -0800 (PST) MIME-Version: 1.0 References: <20200127210014.5207-1-tkjos@google.com> In-Reply-To: From: Suren Baghdasaryan Date: Mon, 27 Jan 2020 16:05:50 -0800 Message-ID: Subject: Re: [PATCH] staging: android: ashmem: Disallow ashmem memory from being remapped To: Todd Kjos Cc: Joel Fernandes , Greg Kroah-Hartman , Arve Hjonnevag , "open list:ANDROID DRIVERS" , LKML , Martijn Coenen , "Joel Fernandes (Google)" , "Cc: Android Kernel" , Jann Horn , stable Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jan 27, 2020 at 3:57 PM 'Todd Kjos' via kernel-team wrote: > > On Mon, Jan 27, 2020 at 2:30 PM Joel Fernandes wrote: > > > > On Mon, Jan 27, 2020 at 1:00 PM 'Todd Kjos' via kernel-team > > wrote: > > > > > > From: Suren Baghdasaryan > > > > > > When ashmem file is being mmapped the resulting vma->vm_file points to the > > > backing shmem file with the generic fops that do not check ashmem > > > permissions like fops of ashmem do. Fix that by disallowing mapping > > > operation for backing shmem file. > > > > Looks good, but I think the commit message is confusing. I had to read > > the code a couple times to understand what's going on since there are > > no links to a PoC for the security issue, in the commit message. I > > think a better message could have been: > > > > When ashmem file is mmapped, the resulting vma->vm_file points to the > > backing shmem file with the generic fops that do not check ashmem > > permissions like fops of ashmem do. If an mremap is done on the ashmem > > region, then the permission checks will be skipped. Fix that by disallowing > > mapping operation on the backing shmem file. > > Sent v2 with the suggested change. Sorry for the delay. The suggestion makes sense to me. Thanks! > > > > > Or did I miss something? > > > > thanks! > > > > - Joel > > > > > > > > > > > > Reported-by: Jann Horn > > > Signed-off-by: Suren Baghdasaryan > > > Cc: stable # 4.4,4.9,4.14,4.18,5.4 > > > Signed-off-by: Todd Kjos > > > --- > > > drivers/staging/android/ashmem.c | 28 ++++++++++++++++++++++++++++ > > > 1 file changed, 28 insertions(+) > > > > > > diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c > > > index 74d497d39c5a..c6695354b123 100644 > > > --- a/drivers/staging/android/ashmem.c > > > +++ b/drivers/staging/android/ashmem.c > > > @@ -351,8 +351,23 @@ static inline vm_flags_t calc_vm_may_flags(unsigned long prot) > > > _calc_vm_trans(prot, PROT_EXEC, VM_MAYEXEC); > > > } > > > > > > +static int ashmem_vmfile_mmap(struct file *file, struct vm_area_struct *vma) > > > +{ > > > + /* do not allow to mmap ashmem backing shmem file directly */ > > > + return -EPERM; > > > +} > > > + > > > +static unsigned long > > > +ashmem_vmfile_get_unmapped_area(struct file *file, unsigned long addr, > > > + unsigned long len, unsigned long pgoff, > > > + unsigned long flags) > > > +{ > > > + return current->mm->get_unmapped_area(file, addr, len, pgoff, flags); > > > +} > > > + > > > static int ashmem_mmap(struct file *file, struct vm_area_struct *vma) > > > { > > > + static struct file_operations vmfile_fops; > > > struct ashmem_area *asma = file->private_data; > > > int ret = 0; > > > > > > @@ -393,6 +408,19 @@ static int ashmem_mmap(struct file *file, struct vm_area_struct *vma) > > > } > > > vmfile->f_mode |= FMODE_LSEEK; > > > asma->file = vmfile; > > > + /* > > > + * override mmap operation of the vmfile so that it can't be > > > + * remapped which would lead to creation of a new vma with no > > > + * asma permission checks. Have to override get_unmapped_area > > > + * as well to prevent VM_BUG_ON check for f_ops modification. > > > + */ > > > + if (!vmfile_fops.mmap) { > > > + vmfile_fops = *vmfile->f_op; > > > + vmfile_fops.mmap = ashmem_vmfile_mmap; > > > + vmfile_fops.get_unmapped_area = > > > + ashmem_vmfile_get_unmapped_area; > > > + } > > > + vmfile->f_op = &vmfile_fops; > > > } > > > get_file(asma->file); > > > > > > -- > > > 2.25.0.341.g760bfbb309-goog > > > > > > -- > > > To unsubscribe from this group and stop receiving emails from it, send an email to kernel-team+unsubscribe@android.com. > > > > > -- > To unsubscribe from this group and stop receiving emails from it, send an email to kernel-team+unsubscribe@android.com. >