Re: [PATCH V4] Fix pointer cast for 32 bits arch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 16, 2015 at 06:14:55PM +0200, Geert Uytterhoeven wrote:
> On Thu, Apr 16, 2015 at 3:39 PM, Peter Senna Tschudin
> <peter.senna@xxxxxxxxx> wrote:
> > --- a/drivers/staging/goldfish/goldfish_audio.c
> > +++ b/drivers/staging/goldfish/goldfish_audio.c
> > @@ -63,7 +63,7 @@ struct goldfish_audio {
> >  #define AUDIO_READ(data, addr)         (readl(data->reg_base + addr))
> >  #define AUDIO_WRITE(data, addr, x)     (writel(x, data->reg_base + addr))
> >  #define AUDIO_WRITE64(data, addr, addr2, x)    \
> > -       (gf_write64((u64)(x), data->reg_base + addr, data->reg_base+addr2))
> > +       (gf_write_ptr((void *)(x), data->reg_base + addr, data->reg_base+addr2))
> 
> This one should not be converted, as all callers pass a dma_addr_t, which may
> be 64-bit on 32-bit systems, i.e. larger than void *.

Ugh...  You're right.

I've been avoiding asking this but I can't any longer.  What is
gf_write64() actually doing?  We are writing dma addresses, user space
pointers and kernel space pointers to this hardware?

This stuff doesn't seem to make any kind of sense and I can easily
imagine a situation where it wrote a 64 bit pointer.  Then we partially
write over it with a 32 bit userspace pointer.  Then it writes somewhere
totally unintended.

This thing doesn't make any sort of sense to me.

regards,
dan carpenter
_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux