<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>43053</bug_id>
          
          <creation_ts>2022-06-23 16:25:18 +0300</creation_ts>
          <short_desc>gcc12: очевидно неверное предупреждение &quot;dangling pointer may be used&quot;</short_desc>
          <delta_ts>2022-06-23 16:25:18 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>gcc12</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Sheplyakov">asheplyakov</reporter>
          <assigned_to name="Gleb F-Malinovskiy">glebfm</assigned_to>
          <cc>glebfm</cc>
    
    <cc>ldv</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>212003</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2022-06-23 16:25:18 +0300</bug_when>
    <thetext>drivers/staging/rtl8192u/r8180_93cx6.c: In function &apos;eprom_w&apos;:
drivers/staging/rtl8192u/r8180_93cx6.c:69:17: error: dangling pointer to &apos;cmdreg&apos; may be used [-Werror=dangling-pointer=]
    69 |                 write_nic_byte_E(dev, EPROM_CMD, cmdreg | EPROM_W_BIT);
       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/rtl8192u/r8180_93cx6.c:62:12: note: &apos;cmdreg&apos; declared here
    62 |         u8 cmdreg;
       |            ^~~~~~


60 static void eprom_w(struct net_device *dev, short bit)                                     
61 {                
62         u8 cmdreg;
63         int err;                                                                           
64 
65         err = read_nic_byte_E(dev, EPROM_CMD, &amp;cmdreg);
66         if (err)                  
67                 return;
68         if (bit)
69                 write_nic_byte_E(dev, EPROM_CMD, cmdreg | EPROM_W_BIT);                    
70         else                                                        
71                 write_nic_byte_E(dev, EPROM_CMD, cmdreg &amp; ~EPROM_W_BIT);
72 
73         force_pci_posting(dev);
74         udelay(EPROM_DELAY);
75 }


где read_nic_byte_E вот такая:

int read_nic_byte_E(struct net_device *dev, int indx, u8 *data)
{
        int status;
        struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
        struct usb_device *udev = priv-&gt;udev;
        u8 *usbdata = kzalloc(sizeof(u8), GFP_KERNEL);

        if (!usbdata)
                return -ENOMEM;

        status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
                                 RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
                                 indx | 0xfe00, 0, usbdata, 1, 500);
        *data = *usbdata;
        kfree(usbdata);

        if (status &lt; 0) { 
                netdev_err(dev, &quot;%s failure status: %d\n&quot;, __func__, status);
                return status;
        }

        return 0;
}


read_nic_byte_E cmdreg не читает, а только пишет туда (содержимое регистра устройства).
В случае ошибки в cmdreg действительно остаётся изначальное значение (мусор, который был в стеке).
Но при ошибке 69-я строка никогда не выполняется.

Таким образом значение cmdreg в строке 69 всегда проинициализировано, а предупреждение
&quot;dangling pointer to &apos;cmdreg&apos; may be used&quot; - заведомо ложное.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>