Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp3910871ybv; Tue, 25 Feb 2020 09:29:25 -0800 (PST) X-Google-Smtp-Source: APXvYqyk9XxKjjKg5LI9obtWKjj4FpXsTk7gAn80HQMMfGQ/vvJjhsl4jQiojuE8j8wtCEHLh6nY X-Received: by 2002:a9d:811:: with SMTP id 17mr47336703oty.369.1582651765028; Tue, 25 Feb 2020 09:29:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582651765; cv=none; d=google.com; s=arc-20160816; b=g307aPrO0NUhIcmV85SqTqJhxUhls2wO/zyl3lQedhMG8soDrT9/iTd0/iK544aWtq 5neEDrW83wOWp1rs4QGtg5tKrYSADK2CippZT1hp8dPEknfpju/nFDawNrDOHbg2Vvsz nn0rQJBHnKOMieh+2nXpJTuV/liBTVnXDRLEHf3c1R9lUyFz9Kn5TAfuxfN+mu7xkVNd X6RfKWVUsUG1MoY80/2iA5HvSdJA+gZeFuedsDr2kYBZwPhLUC5Wb8Y/o2NKXPXt7zUf R1/NBrkfnG6P3skG/6HQcndhZxl0VRL4TT8TnDLaMxrLKKuA1n7wx4DS2P0nUIuI6ivO Ks4Q== 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=lfotpKjLU7BxU2unCoAL0OLP6JpkqZvfhxJOwfxAYmg=; b=SwNOW9eIN45RmZL8SR+sAOnwIrajinu8vR1hrZJ+A38y/HPjIGO6/Gkq5dqeNZ2lA7 CCF6ky76vH6ZIGDrTUbvvgcqr2E7CziSAVzrJ8H4i+PyKi2+t+SRWXYwDTtnV1lwMiEC 7pC3ytDqOxxjin+M/0xndfYxjJxUIxek9f7vYJktaR9BKeFMmSnkb/w2SWmPHLvxjXGu hPBHW0Rpi0B4czKFLmCWOjH+j7gthglrhY5GorjgCLEcy8bNnAJ6ko4TMCgpuVC1BkAj LvytUcRGrYOJJd2bZBR30KxvUpw5EWcsKqt9rdHO4fm3ZcACo+XAk/Tioek7v1G5Jy4v jBqA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=ltTXZwDq; 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 z26si8613562oti.215.2020.02.25.09.29.12; Tue, 25 Feb 2020 09:29:25 -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=ltTXZwDq; 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 S1731239AbgBYRYo (ORCPT + 99 others); Tue, 25 Feb 2020 12:24:44 -0500 Received: from mail-pf1-f196.google.com ([209.85.210.196]:34043 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728515AbgBYRYo (ORCPT ); Tue, 25 Feb 2020 12:24:44 -0500 Received: by mail-pf1-f196.google.com with SMTP id i6so7547699pfc.1 for ; Tue, 25 Feb 2020 09:24:44 -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=lfotpKjLU7BxU2unCoAL0OLP6JpkqZvfhxJOwfxAYmg=; b=ltTXZwDqi3bj0f4va6iSNa+noIAQ6niJVSGeslx5czOaMstk4QGvtQQBXCIA5DdolR n4MHGW+hII0IRLuu5vH5+ECcXvVBUIxDWvuiepyhTBqQbzFDKU5Eg6L51TGu0NJl6T2d 4Aj3Fnggf+FTY9ad5BqpOrZyLPt3CvCy1aEd8= 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=lfotpKjLU7BxU2unCoAL0OLP6JpkqZvfhxJOwfxAYmg=; b=MpnRqUlPwKk6kDAdz+uhEO7DV2S4h5ILOXtdDY4l2rbyWmXsytbQhtHJAqIkBiQNi6 L8w1fgr01F3+5RTTfG8+oMKpi7oZ0RKn07MN1P6zjkp/noJ+4Ea8nIDuyGbThLLRror2 kSuA4HbhrSD71g3dL1vxQrGsPfZenbQvkIAHvd9V06IfVA5fyjk1mM5x7Awh5z1pb87n X5DhJlutiqw7T7XTN6Z/xfOmMKzefgA4EwIquLyyTP3ZiFo+6Xw/FA/2dKNtSzr/cPO4 0qm90tKW6Hhc+9JyYwO82UYE/ovt7a3lPz8NkZy6deC52bsDECi5BIh0We1EHxGHmwqb P8SA== X-Gm-Message-State: APjAAAVESor8WYd04J8+wjPr2twGCfMnAoSsryK4dmXPylHKsWy+x68j DB/No4AQN/yo8IBQB8hNXS+9kg== X-Received: by 2002:a63:cf06:: with SMTP id j6mr39603191pgg.379.1582651483432; Tue, 25 Feb 2020 09:24:43 -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 a17sm11099378pgv.11.2020.02.25.09.24.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2020 09:24:42 -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 v3] media: mtk-vpu: avoid unaligned access to DTCM buffer. Date: Wed, 26 Feb 2020 01:24:37 +0800 Message-Id: <20200225172437.106679-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 v3: - fix sparse warnings. Change in v2: - fix sparse warnings. --- drivers/media/platform/mtk-vpu/mtk_vpu.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/mtk-vpu/mtk_vpu.c b/drivers/media/platform/mtk-vpu/mtk_vpu.c index a768707abb94..e3fd2d1814f3 100644 --- a/drivers/media/platform/mtk-vpu/mtk_vpu.c +++ b/drivers/media/platform/mtk-vpu/mtk_vpu.c @@ -603,12 +603,14 @@ EXPORT_SYMBOL_GPL(vpu_load_firmware); static void vpu_init_ipi_handler(void *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 = (struct vpu_run __iomem __force *)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); } -- 2.25.0.265.gbab2e86ba0-goog