Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp8126790imu; Tue, 4 Dec 2018 03:28:13 -0800 (PST) X-Google-Smtp-Source: AFSGD/VimnDwUQnAnu8rfQvBb892Tco3y+UxvwRO46axR2RasajAWwe54/goobwKWbQ1o6ORaOFk X-Received: by 2002:a62:2547:: with SMTP id l68mr19412376pfl.131.1543922893620; Tue, 04 Dec 2018 03:28:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543922893; cv=none; d=google.com; s=arc-20160816; b=GpAc3pWLI8czWxsvSJGyyB2waHH8tdhfXTxdDz2CV8fOZByTxYbCZIq/XVWVtIkHIv mlkXoZohCwxNlJSeykwSJEV/+4k9v94pezl7ehvmUHjRe25n4UEFEqI4iLCOGitEGUbv XRFgufM3Q4GMNWNNaYwGz4JEERjjjRSqlRphOaIVX/lATQQ8Ovl8BBO9EvbNhQdxaD33 KWXHrkreKG103fWblJxY9aezLALL6kvh1dTROA2EstFpCWay5YW3Uhdi6Dw3jloE9d7H ow//4KU21D4Gw8BV2kp+6mXQWWah0jgTQjnYxA824ys+eUrgBqKN04VQT5AKQmlAYIPz 2ZIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=1LDlMZux91OyB+ujdWYtMkJETk7XPgl5y66zynXSOE4=; b=ZNON5I30+NDmQVFsxKoJTMUASRV2V1r5xZpn+Ty1J5AT5qW0C4TrR/qPMtRhakzCy0 MVLmRZ0zzBu3GyzbsIFBoJcZmriE7K81v2ifwCnSUEw87DI2qQnQbqzCROd7jpMAJiW+ 8XK7FB/F6l2bvMXFBOz0rqrv04JQusSef9dALoCnCHHFZIxG87SPP+TiZDHrxLgPaCy7 L16F6QjcJCxI+6e92ash3DKhMtlLkvpUTDl6InttSVPG+wPwFuy76YUDaurLiQxZSfjc shx5ABUrZPUWu0bMue9QT6zZan5RliEl/WpDXgE7UgoXICfuRsHOMZqmmso1PhgZV7VM UHIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2PDtq6oH; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e11si15727519pgf.450.2018.12.04.03.27.58; Tue, 04 Dec 2018 03:28:13 -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=@kernel.org header.s=default header.b=2PDtq6oH; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727227AbeLDLAB (ORCPT + 99 others); Tue, 4 Dec 2018 06:00:01 -0500 Received: from mail.kernel.org ([198.145.29.99]:45072 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727216AbeLDK76 (ORCPT ); Tue, 4 Dec 2018 05:59:58 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E035E2087F; Tue, 4 Dec 2018 10:59:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543921197; bh=qp3BCyQlgl/YmA1x5cli6I1ivIES6uDmxX0AXC047pQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2PDtq6oHe2Be27Nykigro6KT//hLnyUhkBcCO4uKr70t91GRCA9SvbXdlkoRzTMES pQBWfgEt4IVvbdf2s6DuD5vekg/g1d3dDP8Oabxr7Cxn1q1zn5hMJfopjFU2fYVDZN trJKslt4gaOQt8nuD9bf8Rxkqg8Zpzi7b32iO/mA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jan Kara Subject: [PATCH 4.19 073/139] udf: Allow mounting volumes with incorrect identification strings Date: Tue, 4 Dec 2018 11:49:14 +0100 Message-Id: <20181204103653.085710497@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181204103649.950154335@linuxfoundation.org> References: <20181204103649.950154335@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jan Kara commit b54e41f5efcb4316b2f30b30c2535cc194270373 upstream. Commit c26f6c615788 ("udf: Fix conversion of 'dstring' fields to UTF8") started to be more strict when checking whether converted strings are properly formatted. Sudip reports that there are DVDs where the volume identification string is actually too long - UDF reports: [ 632.309320] UDF-fs: incorrect dstring lengths (32/32) during mount and fails the mount. This is mostly harmless failure as we don't need volume identification (and even less volume set identification) for anything. So just truncate the volume identification string if it is too long and replace it with 'Invalid' if we just cannot convert it for other reasons. This keeps slightly incorrect media still mountable. CC: stable@vger.kernel.org Fixes: c26f6c615788 ("udf: Fix conversion of 'dstring' fields to UTF8") Reported-and-tested-by: Sudip Mukherjee Signed-off-by: Jan Kara Signed-off-by: Greg Kroah-Hartman --- fs/udf/super.c | 16 ++++++++++------ fs/udf/unicode.c | 14 +++++++++++--- 2 files changed, 21 insertions(+), 9 deletions(-) --- a/fs/udf/super.c +++ b/fs/udf/super.c @@ -831,16 +831,20 @@ static int udf_load_pvoldesc(struct supe ret = udf_dstrCS0toChar(sb, outstr, 31, pvoldesc->volIdent, 32); - if (ret < 0) - goto out_bh; - - strncpy(UDF_SB(sb)->s_volume_ident, outstr, ret); + if (ret < 0) { + strcpy(UDF_SB(sb)->s_volume_ident, "InvalidName"); + pr_warn("incorrect volume identification, setting to " + "'InvalidName'\n"); + } else { + strncpy(UDF_SB(sb)->s_volume_ident, outstr, ret); + } udf_debug("volIdent[] = '%s'\n", UDF_SB(sb)->s_volume_ident); ret = udf_dstrCS0toChar(sb, outstr, 127, pvoldesc->volSetIdent, 128); - if (ret < 0) + if (ret < 0) { + ret = 0; goto out_bh; - + } outstr[ret] = 0; udf_debug("volSetIdent[] = '%s'\n", outstr); --- a/fs/udf/unicode.c +++ b/fs/udf/unicode.c @@ -351,6 +351,11 @@ try_again: return u_len; } +/* + * Convert CS0 dstring to output charset. Warning: This function may truncate + * input string if it is too long as it is used for informational strings only + * and it is better to truncate the string than to refuse mounting a media. + */ int udf_dstrCS0toChar(struct super_block *sb, uint8_t *utf_o, int o_len, const uint8_t *ocu_i, int i_len) { @@ -359,9 +364,12 @@ int udf_dstrCS0toChar(struct super_block if (i_len > 0) { s_len = ocu_i[i_len - 1]; if (s_len >= i_len) { - pr_err("incorrect dstring lengths (%d/%d)\n", - s_len, i_len); - return -EINVAL; + pr_warn("incorrect dstring lengths (%d/%d)," + " truncating\n", s_len, i_len); + s_len = i_len - 1; + /* 2-byte encoding? Need to round properly... */ + if (ocu_i[0] == 16) + s_len -= (s_len - 1) & 2; } }