[Nouveau] [PATCH v3 15/15] secboot: safer zeroing of BL descriptors

Alexandre Courbot acourbot at nvidia.com
Wed Nov 2 06:02:56 UTC 2016


Perform the zeroing of BL descriptors in the caller function instead of
trusting each generator will do it. This could avoid a few pulled hairs.

Signed-off-by: Alexandre Courbot <acourbot at nvidia.com>
---
 drm/nouveau/nvkm/subdev/secboot/acr_r352.c | 4 ++--
 drm/nouveau/nvkm/subdev/secboot/acr_r361.c | 2 --
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drm/nouveau/nvkm/subdev/secboot/acr_r352.c b/drm/nouveau/nvkm/subdev/secboot/acr_r352.c
index 6d79fa27ef14..83de670a4362 100644
--- a/drm/nouveau/nvkm/subdev/secboot/acr_r352.c
+++ b/drm/nouveau/nvkm/subdev/secboot/acr_r352.c
@@ -104,7 +104,6 @@ acr_r352_generate_flcn_bl_desc(const struct nvkm_acr *acr,
 	addr_code = (base + pdesc->app_resident_code_offset) >> 8;
 	addr_data = (base + pdesc->app_resident_data_offset) >> 8;
 
-	memset(desc, 0, sizeof(*desc));
 	desc->ctx_dma = FALCON_DMAIDX_UCODE;
 	desc->code_dma_base = lower_32_bits(addr_code);
 	desc->non_sec_code_off = pdesc->app_resident_code_offset;
@@ -354,6 +353,7 @@ acr_r352_ls_write_wpr(struct acr_r352 *acr, struct list_head *imgs,
 				     &img->lsb_header, sizeof(img->lsb_header));
 
 		/* Generate and write BL descriptor */
+		memset(gdesc, 0, ls_func->bl_desc_size);
 		ls_func->generate_bl_desc(&acr->base, _img, wpr_addr, gdesc);
 
 		nvkm_gpuobj_memcpy_to(wpr_blob, img->lsb_header.bl_data_off,
@@ -515,7 +515,6 @@ acr_r352_generate_hs_bl_desc(const struct hsf_load_header *hdr, void *_bl_desc,
 	struct acr_r352_flcn_bl_desc *bl_desc = _bl_desc;
 	u64 addr_code, addr_data;
 
-	memset(bl_desc, 0, sizeof(*bl_desc));
 	addr_code = offset >> 8;
 	addr_data = (offset + hdr->data_dma_base) >> 8;
 
@@ -719,6 +718,7 @@ acr_r352_load(struct nvkm_acr *_acr, struct nvkm_secboot *sb,
 			      code_size, hsbl_desc->start_tag);
 
 	/* Generate the BL header */
+	memset(bl_desc, 0, bl_desc_size);
 	acr->func->generate_hs_bl_desc(load_hdr, bl_desc, offset);
 
 	/*
diff --git a/drm/nouveau/nvkm/subdev/secboot/acr_r361.c b/drm/nouveau/nvkm/subdev/secboot/acr_r361.c
index df0a8f2a70ee..a758e8d45176 100644
--- a/drm/nouveau/nvkm/subdev/secboot/acr_r361.c
+++ b/drm/nouveau/nvkm/subdev/secboot/acr_r361.c
@@ -73,7 +73,6 @@ acr_r361_generate_flcn_bl_desc(const struct nvkm_acr *acr,
 	addr_code = base + pdesc->app_resident_code_offset;
 	addr_data = base + pdesc->app_resident_data_offset;
 
-	memset(desc, 0, sizeof(*desc));
 	desc->ctx_dma = FALCON_DMAIDX_UCODE;
 	desc->code_dma_base = u64_to_flcn64(addr_code);
 	desc->non_sec_code_off = pdesc->app_resident_code_offset;
@@ -89,7 +88,6 @@ acr_r361_generate_hs_bl_desc(const struct hsf_load_header *hdr, void *_bl_desc,
 {
 	struct acr_r361_flcn_bl_desc *bl_desc = _bl_desc;
 
-	memset(bl_desc, 0, sizeof(*bl_desc));
 	bl_desc->ctx_dma = FALCON_DMAIDX_VIRT;
 	bl_desc->code_dma_base = u64_to_flcn64(offset);
 	bl_desc->non_sec_code_off = hdr->non_sec_code_off;
-- 
2.10.0



More information about the Nouveau mailing list