Fix generic fb_ddc i2c edid probe msg
authorLinus Torvalds <torvalds@woody.osdl.org>
Fri, 17 Nov 2006 06:18:28 +0000 (22:18 -0800)
committerLinus Torvalds <torvalds@woody.osdl.org>
Fri, 17 Nov 2006 06:18:28 +0000 (22:18 -0800)
Benh points out that the msgs[0].flags entry never got initialized, and
since it's an automatic stack allocation, it could have any random
value, which is bad.

Rewrite the initializer to explicitly initialize all fields of the small
i2c_msg structure array we generate.  Just to keep it all obvious, let's
handle msgs[1].buf in the same initializer while we're at it, instead of
initializing that one separately later.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/video/fb_ddc.c

index 3aa6ebf68f178d5bea7b8f3fa34a38f3fd6a5d11..f836137a0edac366b1d814c4230d7517e88a6b9d 100644 (file)
 static unsigned char *fb_do_probe_ddc_edid(struct i2c_adapter *adapter)
 {
        unsigned char start = 0x0;
+       unsigned char *buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
        struct i2c_msg msgs[] = {
                {
                        .addr   = DDC_ADDR,
+                       .flags  = 0,
                        .len    = 1,
                        .buf    = &start,
                }, {
                        .addr   = DDC_ADDR,
                        .flags  = I2C_M_RD,
                        .len    = EDID_LENGTH,
+                       .buf    = buf,
                }
        };
-       unsigned char *buf;
 
-       buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
        if (!buf) {
                dev_warn(&adapter->dev, "unable to allocate memory for EDID "
                         "block.\n");
                return NULL;
        }
-       msgs[1].buf = buf;
 
        if (i2c_transfer(adapter, msgs, 2) == 2)
                return buf;