From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:4864:20::443; helo=mail-wr1-x443.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 650582063E305 for ; Mon, 28 Jan 2019 08:23:38 -0800 (PST) Received: by mail-wr1-x443.google.com with SMTP id s12so18726080wrt.4 for ; Mon, 28 Jan 2019 08:23:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=AaqNeRtSn9NN/W1OyRYOIyCClAnlLqpifjFNNW14924=; b=hu3ug85qukqKxnyhANY5yUUxaxTbTXPZWo4ISWSYWWvIJ4rbfgh5HOFtul+K1mUztI i/ZXhlV7pCFoo7UHMSvZlbsP+qoIRXq3HyU1eJ3fcbJTVF+Q3dbmXgfveCr1V6NuDdkw 2HJfEsixVc3CnDS4ugQlWfRVEn7uBVfmhxy7k= 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:mime-version :content-transfer-encoding; bh=AaqNeRtSn9NN/W1OyRYOIyCClAnlLqpifjFNNW14924=; b=NUulgFWICFPX55FlwfIKNo9vgjuqZvelmIbOuGQdrPajv1KwVVNCc3Le9PB4iVGDVJ JDUYIfLHYFTDew9j70EkxyZLFz0Qsmq+uQWkytKTRhvU59xEU5ZRAeXy5cN0mgKdDIUY 2bLiDfB1/KKZf87sHe76a1NgpAAKUzyNyyQ+LAQsqtV/bljQzeoPwW1or2nx2DpO34jR cwA7GN5+L+T2lbf7MDbr71JxbK74RABoGYruGtYY0vHTYSlBJ9Zwn+eMyW+ig3SmMhhw edb9spPYODjL9+Em5szQrpgGIrPKKcoBnqDfhZNgn8JVChgoi9a+l8i9Tk6+zO3lVlAx 5Kbw== X-Gm-Message-State: AJcUukdz6nOMomBzX1sxAM20n1e7Q90UCqKGtYsN5T3VIfyB1lDwp701 i5EEU+BoLUCZ72pfPonJMxJvmJrMXAw= X-Google-Smtp-Source: ALg8bN7ZcMzyQngqk7nlsS7QZ5ovoK31Wet01k3GELUQNFMTa4mDfl3xYqzL7NKpgIDIAZqkU+O8oA== X-Received: by 2002:adf:e64d:: with SMTP id b13mr22980342wrn.276.1548692616204; Mon, 28 Jan 2019 08:23:36 -0800 (PST) Received: from localhost.localdomain (laubervilliers-657-1-83-120.w92-154.abo.wanadoo.fr. [92.154.90.120]) by smtp.gmail.com with ESMTPSA id q14sm88088935wrw.39.2019.01.28.08.23.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Jan 2019 08:23:35 -0800 (PST) From: Ard Biesheuvel To: edk2-devel@lists.01.org Date: Mon, 28 Jan 2019 17:23:32 +0100 Message-Id: <20190128162332.10894-1-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [PATCH] ArmPkg/ArmMmuLib ARM: trim high memory regions instead of rejecting them X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Jan 2019 16:23:38 -0000 Content-Transfer-Encoding: 8bit ArmSetMemoryAttributes() still chokes in some cases, i.e., when the length of the region exceeds 4 GB, the subtraction overflows, which results in the region being misidentified as being 32-bit addressable. Let's update the logic to trim the length to what we can address with 32 bits. This fixes the issue, and also deals with the issue where an entire region is disregarded if part of it exceeds beyond what we can map with 32 bits. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel --- ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c index bffab83d4fd0..baa085c3849a 100644 --- a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c +++ b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c @@ -744,10 +744,11 @@ ArmSetMemoryAttributes ( UINT64 ChunkLength; BOOLEAN FlushTlbs; - if (BaseAddress > (UINT64)MAX_ADDRESS - Length + 1) { + if (BaseAddress > (UINT64)MAX_ADDRESS) { return EFI_UNSUPPORTED; } + Length = MIN (Length, (UINT64)MAX_ADDRESS - BaseAddress + 1); if (Length == 0) { return EFI_SUCCESS; } -- 2.20.1