lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <dc1e02b4-1cb6-5f7c-b612-7d2dd21cbda6@lwfinger.net>
Date:   Fri, 15 Apr 2022 13:53:41 -0500
From:   Larry Finger <Larry.Finger@...inger.net>
To:     Michael Straube <straube.linux@...il.com>,
        gregkh@...uxfoundation.org
Cc:     phil@...lpotter.co.uk, linux-staging@...ts.linux.dev,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 3/8] staging: r8188eu: clean up comments in struct
 rt_firmware_hdr

On 4/15/22 13:05, Michael Straube wrote:
> On 4/15/22 17:44, Larry Finger wrote:
>> On 4/15/22 07:10, Michael Straube wrote:
>>> The comments in struct rt_firmware_hdr are not needed.
>>> Remove them.
>>>
>>> Signed-off-by: Michael Straube <straube.linux@...il.com>
>>> ---
>>> v3:
>>> - no changes
>>>
>>> v2:
>>> - no changes
>>>
>>>   drivers/staging/r8188eu/core/rtw_fw.c | 37 ++++++++-------------------
>>>   1 file changed, 11 insertions(+), 26 deletions(-)
>>>
>>> diff --git a/drivers/staging/r8188eu/core/rtw_fw.c 
>>> b/drivers/staging/r8188eu/core/rtw_fw.c
>>> index 7cd08268f3b9..323e0c634c4e 100644
>>> --- a/drivers/staging/r8188eu/core/rtw_fw.c
>>> +++ b/drivers/staging/r8188eu/core/rtw_fw.c
>>> @@ -14,37 +14,22 @@
>>>       (le16_to_cpu(_fwhdr->Signature) & 0xFFF0) == 0x2300 ||    \
>>>       (le16_to_cpu(_fwhdr->Signature) & 0xFFF0) == 0x88E0)
>>> -/*  This structure must be careful with byte-ordering */
>>> -
>>>   struct rt_firmware_hdr {
>>> -    /*  8-byte alinment required */
>>> -    /*  LONG WORD 0 ---- */
>>> -    __le16        Signature;    /* 92C0: test chip; 92C,
>>> -                     * 88C0: test chip; 88C1: MP A-cut;
>>> -                     * 92C1: MP A-cut */
>>> -    u8        Category;    /*  AP/NIC and USB/PCI */
>>> -    u8        Function;    /*  Reserved for different FW function
>>> -                     *  indcation, for further use when
>>> -                     *  driver needs to download different
>>> -                     *  FW for different conditions */
>>> -    __le16        Version;    /*  FW Version */
>>> -    u8        Subversion;    /*  FW Subversion, default 0x00 */
>>> +    __le16        Signature;
>>> +    u8        Category;
>>> +    u8        Function;
>>> +    __le16        Version;
>>> +    u8        Subversion;
>>>       u8        Rsvd1;
>>> -
>>> -    /*  LONG WORD 1 ---- */
>>> -    u8        Month;    /*  Release time Month field */
>>> -    u8        Date;    /*  Release time Date field */
>>> -    u8        Hour;    /*  Release time Hour field */
>>> -    u8        Minute;    /*  Release time Minute field */
>>> -    __le16        RamCodeSize;    /*  The size of RAM code */
>>> +    u8        Month;
>>> +    u8        Date;
>>> +    u8        Hour;
>>> +    u8        Minute;
>>> +    __le16        RamCodeSize;
>>>       u8        Foundry;
>>>       u8        Rsvd2;
>>> -
>>> -    /*  LONG WORD 2 ---- */
>>> -    __le32        SvnIdx;    /*  The SVN entry index */
>>> +    __le32        SvnIdx;
>>>       __le32        Rsvd3;
>>> -
>>> -    /*  LONG WORD 3 ---- */
>>>       __le32        Rsvd4;
>>>       __le32        Rsvd5;
>>>   };
>>
>> The comments "LONG WORD" are useless, but the comments describing the fields 
>> are still useful. I do not like this patch.
>>
> 
> Hi Larry,
> 
> You are right the in-line comments are useful. I'll send v4 keeping
> them.
> 
> You only mentioned the in-line comments, just to get it right this
> time:
> 
> What about the "8-byte alignment required" comment? You said in another
> thread that the __le16 references need alignment 4. Should I make the
> struct __aligned(8) or at least __aligned(4)?

Routines cpu_to_le16() and le16_to_cpu() require two-byte alignment. Similarly, 
the 32-bit versions need 4-byte alignment. The layout of the struct will ensure 
that as long as the entire struct has 4-byte alignment.

This struct is only used in rtl8188e_firmware_download() where it is created on 
the stack. That means it will be 8-byte aligned for x86_64 and 4-byle aligned on 
32-bit systems. I'm sure that Dan or GregKH will correct me if I got this wrong, 
but that should be sufficient. Making it __aligned(8) could waste 4 bytes on the 
stack for 32-bit systems. Using __aligned(4) would have no effect on any system.

I say remove the comment.

> 
> And about "/*  This structure must be careful with byte-ordering */" ?
> I think it's obvious because of the __le16 and __le32 fields and can be
> removed. Do you agree on that?

Using the __leNN implies little-endian, thus that comment is useless. Yes, I agree.


Larry

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ