From patchwork Sat Mar 3 00:59:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Biggers X-Patchwork-Id: 880970 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="EYU40IkK"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ztSWH4PkPz9s92 for ; Sat, 3 Mar 2018 11:59:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964844AbeCCA7y (ORCPT ); Fri, 2 Mar 2018 19:59:54 -0500 Received: from mail-io0-f193.google.com ([209.85.223.193]:45837 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964833AbeCCA7v (ORCPT ); Fri, 2 Mar 2018 19:59:51 -0500 Received: by mail-io0-f193.google.com with SMTP id m22so12419268iob.12 for ; Fri, 02 Mar 2018 16:59:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nDVHRff/fJtgRK8Bk5eHOEU2OtlxWCQj0dyO7PGY1Ak=; b=EYU40IkK1L8FwYIbBjCPoUmIyL5t0+E26TB106VzWJyHOysAmGgLgccUE+urIDMBD5 UUYJkbWz7NitckxhamvTfIHTcSHJYB4ruAo1Yp/ZEdWoZxkUO2JxmOn4usoeEzGeujM1 pGSWkSiWW8mp7nDOZvgqd0aO1D9hRjwHjT88pQr+v/SYhAsaMMpwQLsWzX8+nGr94WFD Y6gdea0/1GFdOvG104qwyFsfn6UmuHka9oNXAThtO8cNaPj3Oy4LDNHYYGo6anAlUajL RagJCJNWeTdsWLMhJpRBPo40JsNxhBT3QVXnmFm7+cG2k3fAH5QxYdo9JwE/EncXnw9x nBiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nDVHRff/fJtgRK8Bk5eHOEU2OtlxWCQj0dyO7PGY1Ak=; b=dqyegGK/BW/VsEP7ICZYG2/2uF3FheMGLNG7TAWkx0Ek1d5ZEss74PfEmMRUZDZig/ XC4ZaIV/l4L5b9OlSy9f9AE4LDaWkArLCLG++ArpGEd3qzMJf5b5FKP+tkFUoqlOc7Pq toj8o0QFYRPUm/buUPNlKKnfDzKUckMMzJlNgCuknhuV07oR1MVz+N3FmN+h/eUd10Rf azCoJvC2w+FNc2KPp+OZ28gbcAauGshLR8C5V/VZ486zwhHKOlMU9f3h174KhRAbkk1K jyL2G6Wsgsiv5g1xcYZdxlcavxbTzjSsV6OqN5VXICwLuPi0J+8qD9N0zS6M4Atkslt6 t03w== X-Gm-Message-State: APf1xPDmjE6660aDeSs0UtXpbYPCSZz1NumFDIEvazGuK3M4SfRVi8Oe tJrYQJIXwxv/HF26H3BZHcH29LCe X-Google-Smtp-Source: AG47ELv61VfWkNdIF78PzO68zNndQA6Fbdqg09NS3su8X15tNiK2euf0QxHMb+3ezDI9ogX0DK8s1A== X-Received: by 10.107.212.7 with SMTP id l7mr8625608iog.70.1520038790852; Fri, 02 Mar 2018 16:59:50 -0800 (PST) Received: from ebiggers-linuxstation.kir.corp.google.com ([2620:15c:17:3:dc28:5c82:b905:e8a8]) by smtp.gmail.com with ESMTPSA id p135sm1382972itg.44.2018.03.02.16.59.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 02 Mar 2018 16:59:50 -0800 (PST) From: Eric Biggers To: linux-ext4@vger.kernel.org Cc: Eric Biggers Subject: [PATCH 05/10] e2fsck: validate fscrypt_symlink_data.len for fast symlinks too Date: Fri, 2 Mar 2018 16:59:18 -0800 Message-Id: <20180303005923.152761-6-ebiggers3@gmail.com> X-Mailer: git-send-email 2.16.2.395.g2e18187dfd-goog In-Reply-To: <20180303005923.152761-1-ebiggers3@gmail.com> References: <20180303005923.152761-1-ebiggers3@gmail.com> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Eric Biggers Both fast and slow encrypted symlinks are prefixed with the ciphertext length field (fscrypt_symlink_data.len). But e2fsck was only checking it for slow symlinks. Start checking it for fast symlinks too. This matches the kernel handling of encrypted symlinks. Signed-off-by: Eric Biggers --- e2fsck/pass1.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index 723acf09..d9df28ed 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -183,6 +183,7 @@ int e2fsck_pass1_check_device_inode(ext2_filsys fs EXT2FS_ATTR((unused)), int e2fsck_pass1_check_symlink(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode, char *buf) { + unsigned int buflen; unsigned int len; int i; ext2_extent_handle_t handle; @@ -232,9 +233,8 @@ int e2fsck_pass1_check_symlink(ext2_filsys fs, ext2_ino_t ino, if (inode->i_size >= sizeof(inode->i_block)) return 0; - len = strnlen((char *)inode->i_block, sizeof(inode->i_block)); - if (len == sizeof(inode->i_block)) - return 0; + buf = (char *)inode->i_block; + buflen = sizeof(inode->i_block); } else { if ((inode->i_size >= fs->blocksize) || (inode->i_block[0] < fs->super->s_first_data_block) || @@ -248,14 +248,17 @@ int e2fsck_pass1_check_symlink(ext2_filsys fs, ext2_ino_t ino, if (io_channel_read_blk64(fs->io, inode->i_block[0], 1, buf)) return 0; - if (inode->i_flags & EXT4_ENCRYPT_FL) { - len = ext2fs_le16_to_cpu(*((__u16 *)buf)) + 2; - } else { - len = strnlen(buf, fs->blocksize); - } - if (len >= fs->blocksize) - return 0; + buflen = fs->blocksize; } + + if (inode->i_flags & EXT4_ENCRYPT_FL) + len = ext2fs_le16_to_cpu(*(__u16 *)buf) + 2; + else + len = strnlen(buf, buflen); + + if (len >= buflen) + return 0; + if (len != inode->i_size) if ((inode->i_flags & EXT4_ENCRYPT_FL) == 0) return 0;