Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp1669588ybv; Fri, 14 Feb 2020 04:02:20 -0800 (PST) X-Google-Smtp-Source: APXvYqzPbOPbB7/ONOOkByPxW/1ax1RsWxkfC+xFw4MSjjAm7nTIod9/9Rv4zvNRMLqYcW+NGU7B X-Received: by 2002:a05:6830:10c6:: with SMTP id z6mr2062008oto.203.1581681740259; Fri, 14 Feb 2020 04:02:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581681740; cv=none; d=google.com; s=arc-20160816; b=ptNS+84T9uhViuIGg9kY0PiVmqZa7NxcnSNz2fN2eigg4gTvyWrZbxAQ4fyfp5B2lA bLGeYsU12oPUNiU7lcn7jJTUdJ7QSzbdHvQkyQUyJuDsv84+d2t3UJQk8NIGJ66OKAFx QXhfYUcydvOW10NAEczXxtMZtkQdTeVlK+8lYwAPbsQVctyHTMQUXTX1TJg5mRgd/cZD H9zUdwz5JyNufziISTyxZQDBLehm/g+KmR/pBzkukkyzJmqJjyA9QUuxUFHsCuwJcZoW r8iySNLg/Dj28OuqcmUJmSTRYNzqLLnhhtFhBhEa7itE7hYAfwLKpl39lwwGp4pIXAa5 VqRg== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=SrEeeiMYTh8tdM4uM57yi2C/Gx0ZYDeODDLqafFzdQw=; b=dTv3kYqEVaFXjeng1tsBaktFYUaaeFjIeCurzth2TUXqQOS3ps/YVcQhuqmkJaewoK b8XDsXAUD+CM+iReZUpJCxJoE15XkjC9k3M1Uc++lO3F3gWomMkly0kuv7ryeYtj7gic bhw066HNmbMm2ZZMjpuprqV5kVuokpqLDswLpijasdMFcJ2ecrLjxf8jr0to7wDcYbR1 u/GLB2fXuy+ytCFd/Tp9AxlzPfdIaBAs0stWgRG/WryrLcajQKVsybcgjW+uDpKx+q5i PufQfU3/JxZ89TiQtMyA+8PAqVDh4Bh6BD3+z61wMFGS8MI8N1AJ+jKAmoxSKuu0PaYt Gogg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=mgJ1kYMC; 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=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o18si2466457oic.18.2020.02.14.04.02.06; Fri, 14 Feb 2020 04:02: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=@chromium.org header.s=google header.b=mgJ1kYMC; 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=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728522AbgBNMBu (ORCPT + 99 others); Fri, 14 Feb 2020 07:01:50 -0500 Received: from mail-pl1-f193.google.com ([209.85.214.193]:40780 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728036AbgBNMBt (ORCPT ); Fri, 14 Feb 2020 07:01:49 -0500 Received: by mail-pl1-f193.google.com with SMTP id y1so3666194plp.7 for ; Fri, 14 Feb 2020 04:01:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=SrEeeiMYTh8tdM4uM57yi2C/Gx0ZYDeODDLqafFzdQw=; b=mgJ1kYMC+BKoJPHgI/QnmPPE5wphvts8MkBDeru9Bwop/IFN17dqQ8HwYmQciHiVmc 8pDKI2wW53lT/DGGKiXtf8AYsk7nhkyInXUtN8syisSnx1SkqkFpmmaLOTfvCtTT8mN5 aEz8ZBVe5ISoTRl7RQOkFKkH7rSgiFbU/VUMo= 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=SrEeeiMYTh8tdM4uM57yi2C/Gx0ZYDeODDLqafFzdQw=; b=RBqM17ytYvc1oeFH+ghDT6sgP6gt7hOkIJ8k109VtJiOLFQEC5QPXILjiQ2XXihGsl +z+yuAfyV1CyEBsKu92lEoqmJIU5+fRVDNFlMhbUB7gBV1WjdQUOB9v/w+n7l/NqaxG8 qUXCuByALWV8dcYSqBehEK49ETMrwyO6lx2v/BLGC8JFX/5FlhVnGWPB3MrIZY/hjp+S sQeJT/bOU9+zoImBFrM6zHaKwsa1jQJThL2Ro+pXQEKhObKR/u1S4lP0216z6VwzDZsX 5/RjHMsqQBcr3oh64VMeMvbvvCq3R/FItsRI0KqZYQ/Ua5zQ3Jgrxh0srelTJ+jnd4D6 yVOQ== X-Gm-Message-State: APjAAAXLJ9TwYjwIegnnaEZPv3Ye+1nkFXNGV/hIlFhRtZ2y7ctjl3c9 JWUQzG2Fp1fTQPiOR/rojgisaw== X-Received: by 2002:a17:902:b40c:: with SMTP id x12mr3045452plr.70.1581681708257; Fri, 14 Feb 2020 04:01:48 -0800 (PST) Received: from hsinyi-z840.tpe.corp.google.com ([2401:fa00:1:10:b852:bd51:9305:4261]) by smtp.gmail.com with ESMTPSA id s18sm7120275pgn.34.2020.02.14.04.01.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2020 04:01:47 -0800 (PST) From: Hsin-Yi Wang To: linux-arm-kernel@lists.infradead.org Cc: Minghsiu Tsai , Houlong Wei , Andrew-CT Chen , Tiffany Lin , Mauro Carvalho Chehab , Matthias Brugger , Enric Balletbo i Serra , Hans Verkuil , linux-media@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] media: mtk-vpu: avoid unaligned access to DTCM buffer. Date: Fri, 14 Feb 2020 20:01:42 +0800 Message-Id: <20200214120142.50529-1-hsinyi@chromium.org> X-Mailer: git-send-email 2.25.0.265.gbab2e86ba0-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org struct vpu_run *run in vpu_init_ipi_handler() is an ioremapped DTCM (Data Tightly Coupled Memory) buffer shared with AP. It's not able to do unaligned access. Otherwise kernel would crash due to unable to handle kernel paging request. struct vpu_run { u32 signaled; char fw_ver[VPU_FW_VER_LEN]; unsigned int dec_capability; unsigned int enc_capability; wait_queue_head_t wq; }; fw_ver starts at 4 byte boundary. If system enables CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS, strscpy() will do read_word_at_a_time(), which tries to read 8-byte: *(unsigned long *)addr Copy the string by memcpy_fromio() for this buffer to avoid unaligned access. Fixes: 85709cbf1524 ("media: replace strncpy() by strscpy()") Signed-off-by: Hsin-Yi Wang --- Change in v2: - fix sparse warnings. --- drivers/media/platform/mtk-vpu/mtk_vpu.c | 17 ++++++++++------- drivers/media/platform/mtk-vpu/mtk_vpu.h | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/mtk-vpu/mtk_vpu.c b/drivers/media/platform/mtk-vpu/mtk_vpu.c index a768707abb94..c59373e84a33 100644 --- a/drivers/media/platform/mtk-vpu/mtk_vpu.c +++ b/drivers/media/platform/mtk-vpu/mtk_vpu.c @@ -600,15 +600,18 @@ int vpu_load_firmware(struct platform_device *pdev) } EXPORT_SYMBOL_GPL(vpu_load_firmware); -static void vpu_init_ipi_handler(void *data, unsigned int len, void *priv) +static void vpu_init_ipi_handler(void __iomem *data, unsigned int len, + void *priv) { struct mtk_vpu *vpu = (struct mtk_vpu *)priv; - struct vpu_run *run = (struct vpu_run *)data; - - vpu->run.signaled = run->signaled; - strscpy(vpu->run.fw_ver, run->fw_ver, sizeof(vpu->run.fw_ver)); - vpu->run.dec_capability = run->dec_capability; - vpu->run.enc_capability = run->enc_capability; + struct vpu_run __iomem *run = data; + + vpu->run.signaled = readl(&run->signaled); + memcpy_fromio(vpu->run.fw_ver, run->fw_ver, sizeof(vpu->run.fw_ver)); + /* Make sure the string is NUL-terminated */ + vpu->run.fw_ver[sizeof(vpu->run.fw_ver) - 1] = '\0'; + vpu->run.dec_capability = readl(&run->dec_capability); + vpu->run.enc_capability = readl(&run->enc_capability); wake_up_interruptible(&vpu->run.wq); } diff --git a/drivers/media/platform/mtk-vpu/mtk_vpu.h b/drivers/media/platform/mtk-vpu/mtk_vpu.h index d4453b4bcee9..a7ac351b19c1 100644 --- a/drivers/media/platform/mtk-vpu/mtk_vpu.h +++ b/drivers/media/platform/mtk-vpu/mtk_vpu.h @@ -15,7 +15,7 @@ * VPU interfaces with other blocks by share memory and interrupt. **/ -typedef void (*ipi_handler_t) (void *data, +typedef void (*ipi_handler_t) (void __iomem *data, unsigned int len, void *priv); -- 2.25.0.265.gbab2e86ba0-goog