From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E350DC4332F for ; Mon, 12 Dec 2022 21:01:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0C0928E0003; Mon, 12 Dec 2022 16:01:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 070D38E0002; Mon, 12 Dec 2022 16:01:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E7A268E0003; Mon, 12 Dec 2022 16:01:48 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id D82228E0002 for ; Mon, 12 Dec 2022 16:01:48 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 93175AB18B for ; Mon, 12 Dec 2022 21:01:48 +0000 (UTC) X-FDA: 80234875896.29.E609AB3 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf03.hostedemail.com (Postfix) with ESMTP id 7873120010 for ; Mon, 12 Dec 2022 21:01:44 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=ROzf0OEV; spf=pass (imf03.hostedemail.com: domain of "SRS0=Tsvw=4K=zx2c4.com=Jason@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Tsvw=4K=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1670878906; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=+33heWZqPNvN/OOyLci+aYXHO8pTl7ySUh12yfzj1hI=; b=We03AqtFE/PiwhYHlzBjwLF88C1U/njjznXY5fYVtJk7RT1Q3D1nVxNDpSiOWS4GWDkqyW GKtoxFwPoI8+f9tGqX8YHgIUtjPf6KGgA7dAr02EbeA2ua7YP1pXgU8PWG7DguEIXSzsg1 G1IsosXxnb/9N9s7ejj60BxFdsD7/eo= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=ROzf0OEV; spf=pass (imf03.hostedemail.com: domain of "SRS0=Tsvw=4K=zx2c4.com=Jason@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=Tsvw=4K=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1670878906; a=rsa-sha256; cv=none; b=gFN7tiX5gcLwSlToCBR9zBAzvdGEUQuD8gWJO23jRD9LjDwQ3Tyz6Z6daOHytcQ5a0s/NK Kifzm4YXpVDyQ6sIoVuDeHEt/HlnSbOR0sa3s32hejidFtm3Am7z9F9YmhqViSCcwXczSR +LBni5ShVzn89IGQfczb7RnGkwF7wcc= 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 sin.source.kernel.org (Postfix) with ESMTPS id C16CECE112F; Mon, 12 Dec 2022 21:01:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6B883C433EF; Mon, 12 Dec 2022 21:01:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zx2c4.com; s=20210105; t=1670878895; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=+33heWZqPNvN/OOyLci+aYXHO8pTl7ySUh12yfzj1hI=; b=ROzf0OEVcwV9kZSenrrYUtosBdsEhtxY7C5PILTab3NuW9wgoBfEK7sg5PUW//W6yifT10 ENmm15ZqndAQutSnhGJelFw/OERj0DcstMOjf1WGns0U/WRd3zssrruw/4aQoaNXtR6aB3 zGr3RiiFUgrPUH0iNcctwVACAJvXiS4= Received: by mail.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id b60ecb78 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 12 Dec 2022 21:01:35 +0000 (UTC) Date: Mon, 12 Dec 2022 14:01:33 -0700 From: "Jason A. Donenfeld" To: linux-kernel@vger.kernel.org, patches@lists.linux.dev, tglx@linutronix.de Cc: linux-crypto@vger.kernel.org, linux-api@vger.kernel.org, x86@kernel.org, Greg Kroah-Hartman , Adhemerval Zanella Netto , Carlos O'Donell , Florian Weimer , Arnd Bergmann , Jann Horn , Christian Brauner , linux-mm@kvack.org Subject: Re: [PATCH RFC v12 2/6] x86: mm: Skip faulting instruction for VM_DROPPABLE faults Message-ID: References: <20221212185347.1286824-1-Jason@zx2c4.com> <20221212185347.1286824-3-Jason@zx2c4.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20221212185347.1286824-3-Jason@zx2c4.com> X-Rspamd-Queue-Id: 7873120010 X-Stat-Signature: 3ywjf98my1zneiup6cdw51xght5hi1or X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1670878904-893271 X-HE-Meta: U2FsdGVkX1/uQsYCXlW4bFhCHAdt4AZeCdvCrvMNxdxLqB3RL7U8SrwCv2xWI1wNXNGTp8XiQtDNU2K5XKblS+NAyzEM7NvONCSn+ycT5XhDY0XZ8UFYta0FTOHBZgrHMdKUVaIru0bP3IwuaRWncGhejaeSWG9T0z8mL+TikNryqb5X2eP5XmN3vFSOpYZU0Z1jSYrgYh5XAltmPuMoHMIL6vdNhVXN1/jwQcuitQfxJRxlEp8Q+5qnTHiZNmKZiMHqjziJ4gzZksTGsLodpD+JEhUogXmMagrfE8rocP/qlsvAc8WQkVwvijyPVBuvFMHdC+NUA+aiVtrSUkqObuaSygVfqjZ7a0Mcg3BnrlTT7Oy4f+hpGTzpdSJy6kO7FaEuWZMMLxCzY0OAoNYBc0u/+vCLjoE4bP0HoiqYGoyIdiT9oVI4YxPEcfOuIJAd87YxRFzaOpwJ4ZsAgxWdHzrartV/j/slDGuRSI74eLynrR2ymrlk9VR2e/Qeuh3cgpmmWK2qlLAvx/xztPIAmop97lnxPKylTdPc0nDomF1KYHNhcAwEKnXO5l4n0fles+2GmlxFdbxaqmpSNQHwy/A1zD/AeMXMPy6kfEJ3K79BSqzwhYNYXHo1yaXUe6QdcTtUHW7Y3m6guuQVOrGh9NIC03ECbnp5V5MmO1zOsiwqnTBsjoNGtPRzJpLXJDW8p1EpF4OHXRjC0sbY27WZw1G5nktK1+/VQwR4C0PzxowCzqFX//bqkQkoPvGPeFEtYg82vK7gEWWWZ/DRl8LI8ygeD3AJ2EunJdnS6WcyE44IHQFCr4aQw2tBsM0MefotoYHLBuF6MjQrLhYwRkqmFuR+wIQeXzcG84Jm6cjOdhIjHM6iYDj9QYmZQ+QjLhLaoTARMWEXqYiF2S79UPCnlOwwnsC2wqRWt7e6rVa4GX5jrip4rF38u9jagh82Y/3tzkPSWtLWyZCReHtmTA8 nnopWVBB NG226ruUV7Ax17r/LKWEJ1V5vKAOTAPphlJT6qr1olCAOyWDJJ6KA4SyLLwQmqechj/w3MPccTrknPk0rlVGMBjOlzsoymV4sH18tVsXGcS1FOW0zF/Q4A7b0aTH3NJrXIyB8abQ54xwUSItkcCIF0hw/Hm52zsq96YOqXiXY87LXqk9Z0Nn6Dl1Xx8ZXvtluLbatHoli9JIzX60/23oPdSrpS2w7X+5LNAEs0RqhtvpliS9ph546J6rLGPE0+xZ8bU31i3ISkkCbFEE= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Mon, Dec 12, 2022 at 11:53:43AM -0700, Jason A. Donenfeld wrote: > + if (fault & VM_FAULT_SKIP_INSN) { > + u8 insn_buf[MAX_INSN_SIZE]; > + struct insn insn; > + size_t len; > + > + len = sizeof(insn_buf) - copy_from_user(insn_buf, (void *)regs->ip, sizeof(insn_buf)); > + if (!len) > + return; > + > + if (insn_decode(&insn, insn_buf, len, in_32bit_syscall() ? INSN_MODE_32 : INSN_MODE_64) < 0) > + return; > + > + regs->ip += insn.length; > + return; > + } I just found umip.c, which does basically the same thing, but does it correctly. For v+1, the above snippet will instead do this: if (fault & VM_FAULT_SKIP_INSN) { u8 buf[MAX_INSN_SIZE]; struct insn insn; int nr_copied; nr_copied = insn_fetch_from_user(regs, buf); if (nr_copied <= 0) return; if (!insn_decode_from_regs(&insn, regs, buf, nr_copied)) return; regs->ip += insn.length; return; } Same thing, but those helpers do correct inspection of the environment and registers. Also, seeing this already being done in umip.c is heartening that the approach here isn't overly insane. Jason