Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp859770rwb; Thu, 10 Nov 2022 08:14:02 -0800 (PST) X-Google-Smtp-Source: AMsMyM5yqTtqQ4rOL4K5z1CeqEQymrxoDyFuLzZuw2X4CQg6rdoisD7Dibjc3TWKHXH6egCQWu+S X-Received: by 2002:a05:6402:5483:b0:45c:1336:6d9b with SMTP id fg3-20020a056402548300b0045c13366d9bmr64191508edb.100.1668096842114; Thu, 10 Nov 2022 08:14:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668096842; cv=none; d=google.com; s=arc-20160816; b=z1XHqy0tKZIqcFszf+nMbEkINw9zVyD3hjsqshYx28xeley4P4GuHpT5O5Bk80dVWy SOZ5Dei+a8gGlNYeSaP4dxz+h2gR87nwrnMTVXER0TSUwn9YB90YnyVEcebcPLtnwgol rPjBVp7x0iT9SZtaKELrfWMClmpHw8SG7mCrt+/yOW7L2yUZjFLjYWXx18PhLXRfMx6k xJ/hU6JhEFRWg8gPxoz7Da06wJtOM4JBLYpAaroPhFA7WKCCpYMKBUYykW5GkGxMGRbp JZBFK9qnyTRjvpu9pxPHimbf2xnDYH2yJQyFx4ABT6rozA7F2AP04pal1wQcF8zCGy0T 9NZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=PqIxv0ykgX1dUcCkKNelcPiK/Dm8WOI9ANa20Luuz78=; b=hwJ85iU1y1cV8tyeoZ8zOzM/wT62N4A34f61zbO6ZN4pTju20GLG02Z0sJb+WC7U3g 7mZkEzcQgxkpc2gMcD73tqLhi13TCie6MLX49FO8pAnrFz5HwByu5KuOSacfDoLabSVv atJjhFF9fzHOfsz7K+C2hxSP5i5kM1WgiUbTZ7MmKeLmvZ9fqlAdRnEto8h+2P+a0rlI I2+/48eK9rCg4lbOfp7yR7JeyQkru2UJCDLuvsafVRBIDeyV9KbWOZVfotsm04mBafzR ODs7o6pYD5aOrxdbNhr4qMVq8R6kypw7GvWJPT8gFYM7YE63ULperCrBpCxNdF4F4xRn B94Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=OeMN1rKk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a8-20020a1709064a4800b007ae1723e8d7si14589425ejv.610.2022.11.10.08.13.39; Thu, 10 Nov 2022 08:14:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=OeMN1rKk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230184AbiKJP6N (ORCPT + 92 others); Thu, 10 Nov 2022 10:58:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229688AbiKJP6M (ORCPT ); Thu, 10 Nov 2022 10:58:12 -0500 Received: from mail-oi1-x22e.google.com (mail-oi1-x22e.google.com [IPv6:2607:f8b0:4864:20::22e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 171222B248; Thu, 10 Nov 2022 07:58:11 -0800 (PST) Received: by mail-oi1-x22e.google.com with SMTP id n186so2227087oih.7; Thu, 10 Nov 2022 07:58:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=PqIxv0ykgX1dUcCkKNelcPiK/Dm8WOI9ANa20Luuz78=; b=OeMN1rKkePk0RMijxlVlQsnyZva5JsgGdk5gD1Wmfp7zgg8+KrQGMefkBvzr+SwW44 s1wNFKq9I7T0DgF0Ai2dExVtOhu3yU7GanqxsRIjgwOPwxHpRDfA1UqoHu/qXI8osEey uaCMOJc7hPOr9Bn5/DhUldUC4Jbj2aXb+ZHSIxC0ObYxXTACp84XRJcNR2XmXN7E+B82 ZSko+6Tnz/F1L0TlLzaIiJxfm4DcyLWSncUbNnI6LasnDYaOjXCc8cInixSvW/8FNbaW gI8gssOFwptiwlEVmr09g2dgOVeOKPhdW7ei14S8gviE/FH2cBX0K2q2HIievlWtLBhO NO9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=PqIxv0ykgX1dUcCkKNelcPiK/Dm8WOI9ANa20Luuz78=; b=AHWXkVZPeJb6RkT2os7S/0TUN3Zqyz5wBYtDyuOOCn1Y6B8E4kl/9rjnSacn/2eb9H q4qafmjV0/6SSjYV951R8wA+DSxANGO88Nlm2vO4b3Vk8ZTxDiqbQ+XdnV+bs679uOY7 XHtoc/57X7QDsxj0o/hocrn0HsGX5miNjkV2ryMZO5N0AcvMUAHM2W6AAwI+oM3ebXeW Hw66EuUkdRF0JSNE/lnb42/dR3bPY/6YBFU48zRpGgH/2kQHjnIBAlKQ1pEJqpd+r245 Nz+Vd3TdiuILlzaoBG4jhWsBfXmYcx5GL/o8oTgkW1Fy5bKocSnngeY8zHCL23c2UrYd tAOQ== X-Gm-Message-State: ACrzQf0tdylFaP1LQK3ifiCakVOW5RlKDJVy+z0EoRAftvAPIyoHQtvH 5KA3USpLpvMHbKl5Eb+uX33E+CPGbS/lx0PC5+I= X-Received: by 2002:a05:6808:7dc:b0:34f:97ea:14d with SMTP id f28-20020a05680807dc00b0034f97ea014dmr1581484oij.96.1668095890301; Thu, 10 Nov 2022 07:58:10 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Alex Deucher Date: Thu, 10 Nov 2022 10:57:58 -0500 Message-ID: Subject: Re: [PATCH] [next] drm/amdgpu: Replace one-element array with flex-array member To: Paulo Miguel Almeida Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?UTF-8?Q?Christian_K=C3=B6nig?= , "Pan, Xinhui" , David Airlie , Daniel Vetter , Rongguang Wei , Slark Xiao , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Nov 9, 2022 at 2:33 AM Paulo Miguel Almeida wrote: > > One-element arrays are deprecated, and we are replacing them with > flexible array members instead. So, replace one-element array with > flexible-array member in structs _ATOM_CONNECTOR_DEVICE_TAG_RECORD, > _ATOM_OBJECT_GPIO_CNTL_RECORD, _ATOM_BRACKET_LAYOUT_RECORD, > _ATOM_BRACKET_LAYOUT_RECORD, _ATOM_LEAKAGE_VOLTAGE_OBJECT_V3, > _ATOM_FUSION_SYSTEM_INFO_V3, _ATOM_I2C_DATA_RECORD, > _ATOM_I2C_DEVICE_SETUP_INFO, _ATOM_ASIC_MVDD_INFO and refactor the > rest of the code accordingly. While at it, removed a redundant casting. > > Important to mention is that doing a build before/after this patch results > in no binary output differences. > > This helps with the ongoing efforts to tighten the FORTIFY_SOURCE > routines on memcpy() and help us make progress towards globally > enabling -fstrict-flex-arrays=3 [1]. > > Link: https://github.com/KSPP/linux/issues/79 > Link: https://github.com/KSPP/linux/issues/238 > Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101836 [1] > > Signed-off-by: Paulo Miguel Almeida > --- > > Alex, I noticed a few structs in atombios.h that were not referenced. Is > there any appetite for removing them? Or is that one of those cases > where the structs are there should one driver ever need it? A lot of userspace tools use these tables and I'd like to keep the headers compatible. Also, as I mentioned in the other thread, the atombios command tables often parse these tables when initializing the hardware so when you are debugging a command table, it helps to have the relevant structures defined so it's easier to understand what the command tables are doing. Alex > > Ex.: > struct _ATOM_I2C_DATA_RECORD > struct _ATOM_I2C_DEVICE_SETUP_INFO > struct _ATOM_ASIC_MVDD_INFO > --- > .../gpu/drm/amd/display/dc/bios/bios_parser.c | 5 ++--- > drivers/gpu/drm/amd/include/atombios.h | 16 ++++++++-------- > 2 files changed, 10 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c > index 39dd8b2dc254..6b9e64cd4379 100644 > --- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c > +++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c > @@ -2606,8 +2606,7 @@ static enum bp_result update_slot_layout_info( > > for (;;) { > > - record_header = (ATOM_COMMON_RECORD_HEADER *) > - GET_IMAGE(ATOM_COMMON_RECORD_HEADER, record_offset); > + record_header = GET_IMAGE(ATOM_COMMON_RECORD_HEADER, record_offset); > if (record_header == NULL) { > result = BP_RESULT_BADBIOSTABLE; > break; > @@ -2621,7 +2620,7 @@ static enum bp_result update_slot_layout_info( > > if (record_header->ucRecordType == > ATOM_BRACKET_LAYOUT_RECORD_TYPE && > - sizeof(ATOM_BRACKET_LAYOUT_RECORD) > + struct_size(record, asConnInfo, 1) > <= record_header->ucRecordSize) { > record = (ATOM_BRACKET_LAYOUT_RECORD *) > (record_header); > diff --git a/drivers/gpu/drm/amd/include/atombios.h b/drivers/gpu/drm/amd/include/atombios.h > index 55ae93c1e365..60c44a8a067f 100644 > --- a/drivers/gpu/drm/amd/include/atombios.h > +++ b/drivers/gpu/drm/amd/include/atombios.h > @@ -4733,7 +4733,7 @@ typedef struct _ATOM_CONNECTOR_DEVICE_TAG_RECORD > ATOM_COMMON_RECORD_HEADER sheader; > UCHAR ucNumberOfDevice; > UCHAR ucReserved; > - ATOM_CONNECTOR_DEVICE_TAG asDeviceTag[1]; //This Id is same as "ATOM_DEVICE_XXX_SUPPORT", 1 is only for allocation > + ATOM_CONNECTOR_DEVICE_TAG asDeviceTag[]; //This Id is same as "ATOM_DEVICE_XXX_SUPPORT" > }ATOM_CONNECTOR_DEVICE_TAG_RECORD; > > > @@ -4793,7 +4793,7 @@ typedef struct _ATOM_OBJECT_GPIO_CNTL_RECORD > ATOM_COMMON_RECORD_HEADER sheader; > UCHAR ucFlags; // Future expnadibility > UCHAR ucNumberOfPins; // Number of GPIO pins used to control the object > - ATOM_GPIO_PIN_CONTROL_PAIR asGpio[1]; // the real gpio pin pair determined by number of pins ucNumberOfPins > + ATOM_GPIO_PIN_CONTROL_PAIR asGpio[]; // the real gpio pin pair determined by number of pins ucNumberOfPins > }ATOM_OBJECT_GPIO_CNTL_RECORD; > > //Definitions for GPIO pin state > @@ -4982,7 +4982,7 @@ typedef struct _ATOM_BRACKET_LAYOUT_RECORD > UCHAR ucWidth; > UCHAR ucConnNum; > UCHAR ucReserved; > - ATOM_CONNECTOR_LAYOUT_INFO asConnInfo[1]; > + ATOM_CONNECTOR_LAYOUT_INFO asConnInfo[]; > }ATOM_BRACKET_LAYOUT_RECORD; > > > @@ -5161,7 +5161,7 @@ typedef struct _ATOM_GPIO_VOLTAGE_OBJECT_V3 > UCHAR ucPhaseDelay; // phase delay in unit of micro second > UCHAR ucReserved; > ULONG ulGpioMaskVal; // GPIO Mask value > - VOLTAGE_LUT_ENTRY_V2 asVolGpioLut[1]; > + VOLTAGE_LUT_ENTRY_V2 asVolGpioLut[]; > }ATOM_GPIO_VOLTAGE_OBJECT_V3; > > typedef struct _ATOM_LEAKAGE_VOLTAGE_OBJECT_V3 > @@ -5171,7 +5171,7 @@ typedef struct _ATOM_LEAKAGE_VOLTAGE_OBJECT_V3 > UCHAR ucLeakageEntryNum; // indicate the entry number of LeakageId/Voltage Lut table > UCHAR ucReserved[2]; > ULONG ulMaxVoltageLevel; > - LEAKAGE_VOLTAGE_LUT_ENTRY_V2 asLeakageIdLut[1]; > + LEAKAGE_VOLTAGE_LUT_ENTRY_V2 asLeakageIdLut[]; > }ATOM_LEAKAGE_VOLTAGE_OBJECT_V3; > > > @@ -6599,7 +6599,7 @@ typedef struct _ATOM_FUSION_SYSTEM_INFO_V3 > typedef struct _ATOM_I2C_DATA_RECORD > { > UCHAR ucNunberOfBytes; //Indicates how many bytes SW needs to write to the external ASIC for one block, besides to "Start" and "Stop" > - UCHAR ucI2CData[1]; //I2C data in bytes, should be less than 16 bytes usually > + UCHAR ucI2CData[]; //I2C data in bytes, should be less than 16 bytes usually > }ATOM_I2C_DATA_RECORD; > > > @@ -6610,14 +6610,14 @@ typedef struct _ATOM_I2C_DEVICE_SETUP_INFO > UCHAR ucSSChipID; //SS chip being used > UCHAR ucSSChipSlaveAddr; //Slave Address to set up this SS chip > UCHAR ucNumOfI2CDataRecords; //number of data block > - ATOM_I2C_DATA_RECORD asI2CData[1]; > + ATOM_I2C_DATA_RECORD asI2CData[]; > }ATOM_I2C_DEVICE_SETUP_INFO; > > //========================================================================================== > typedef struct _ATOM_ASIC_MVDD_INFO > { > ATOM_COMMON_TABLE_HEADER sHeader; > - ATOM_I2C_DEVICE_SETUP_INFO asI2CSetup[1]; > + ATOM_I2C_DEVICE_SETUP_INFO asI2CSetup[]; > }ATOM_ASIC_MVDD_INFO; > > //========================================================================================== > -- > 2.37.3 >