]> git.hungrycats.org Git - linux/commitdiff
[PATCH] ppc32: Fix crash on load in DACA sound driver
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 2 Mar 2004 05:52:51 +0000 (21:52 -0800)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 2 Mar 2004 05:52:51 +0000 (21:52 -0800)
The DACA sound driver (early iBook models) doesn't clear the i2c_client
structure. That cause the embedded struct device (and thus kobject) to
contain garbage in the "k_name" field, which kobject_set_name will
later try to kfree...

Also remove references to unused struct data_data.

sound/oss/dmasound/dac3550a.c

index cb8aa7e7328b4ef0118b53889367a93fd7ea06f9..82bc6bfaf2537044c791c953a797940251a91e48 100644 (file)
@@ -42,11 +42,6 @@ static int daca_detach_client(struct i2c_client *client);
 /* Unique ID allocation */
 static int daca_id;
 
-struct daca_data
-{
-       int arf; /* place holder for furture use */
-};
-
 struct i2c_driver daca_driver = {  
        .owner                  = THIS_MODULE,
        .name                   = "DAC3550A driver  V " DACA_VERSION,
@@ -168,12 +163,12 @@ static int daca_detect_client(struct i2c_adapter *adapter, int address)
 {
        const char *client_name = "DAC 3550A Digital Equalizer";
        struct i2c_client *new_client;
-       struct daca_data *data;
        int rc = -ENODEV;
 
-       new_client = kmalloc(sizeof(*new_client) + sizeof(*data), GFP_KERNEL);
+       new_client = kmalloc(sizeof(*new_client), GFP_KERNEL);
        if (!new_client)
                return -ENOMEM;
+       memset(new_client, 0, sizeof(*new_client));
 
        new_client->addr = address;
        new_client->adapter = adapter;
@@ -182,9 +177,6 @@ static int daca_detect_client(struct i2c_adapter *adapter, int address)
        strcpy(new_client->name, client_name);
        new_client->id = daca_id++; /* racy... */
 
-       data = (struct daca_data *)(new_client+1);
-       dev_set_drvdata(&new_client->dev, data);
-
        if (daca_init_client(new_client))
                goto bail;