Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Feb 2009 12:27:15 -0600
From:      Christian Peron <csjp@freebsd.org>
To:        Christoph Mallon <christoph.mallon@gmx.de>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>, FreeBSD Current <freebsd-current@freebsd.org>, Christian Peron <csjp@freebsd.org>
Subject:   Re: write-only variables in src/sys/ - possible bugs
Message-ID:  <20090204182715.GA75911@jnz.sqrt.ca>
In-Reply-To: <4989AC31.6000904@gmx.de>
References:  <49874CA8.5090605@gmx.de> <20090203231155.GA69101@jnz.sqrt.ca> <4989AC31.6000904@gmx.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Feb 04, 2009 at 03:54:41PM +0100, Christoph Mallon wrote:
[..]
> 
> Yes, function arguments are considered being read. The problem is 
> different here: mtod() should be a macro, but the macro declaration was 
> missing (*cough* hacked build process *cough*). So the parser tried to 
> parse this as function call. Then it hit the "void *", which confused it 
> - it got a type while parsing an expression. I improved the error 
> correction, resolved a few other problems, too, and generated a new list:
> 
> http://tron.homeunix.org/unread_variables.log
> (The list has a date at the top, if it is missing, you see the old list 
> in your browser cache)
> 
> The false positives, which you mentioned, are gone now - thanks for 
> reporting this. The list now contains about 1.000 entries and about 60 
> concern variables named 'error'.

Also.. one other thing I noticed:

void
bpf_buffer_append_mbuf(struct bpf_d *d, caddr_t buf, u_int offset, void *src,
    u_int len)
{               
        const struct mbuf *m;
        u_char *dst;
        u_int count;
                
        m = (struct mbuf *)src;
        dst = (u_char *)buf + offset;
        while (len > 0) {
                if (m == NULL)
                        panic("bpf_mcopy");
                count = min(m->m_len, len);
                bcopy(mtod(m, void *), dst, count);
                m = m->m_next;
                dst += count;
                len -= count;
        }
}

  dst += count

In this expression, both dst and count are read since this is the
same thing as:

  dst = dst + count;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090204182715.GA75911>