Commit 1172234c authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'fix/misc' into for-linus

parents 85255c0e b0cc58a2
...@@ -307,7 +307,7 @@ struct ak4113 { ...@@ -307,7 +307,7 @@ struct ak4113 {
int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read, int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read,
ak4113_write_t *write, ak4113_write_t *write,
const unsigned char pgm[AK4113_WRITABLE_REGS], const unsigned char *pgm,
void *private_data, struct ak4113 **r_ak4113); void *private_data, struct ak4113 **r_ak4113);
void snd_ak4113_reg_write(struct ak4113 *ak4113, unsigned char reg, void snd_ak4113_reg_write(struct ak4113 *ak4113, unsigned char reg,
unsigned char mask, unsigned char val); unsigned char mask, unsigned char val);
......
...@@ -70,7 +70,7 @@ static int snd_ak4113_dev_free(struct snd_device *device) ...@@ -70,7 +70,7 @@ static int snd_ak4113_dev_free(struct snd_device *device)
} }
int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read, int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read,
ak4113_write_t *write, const unsigned char pgm[5], ak4113_write_t *write, const unsigned char *pgm,
void *private_data, struct ak4113 **r_ak4113) void *private_data, struct ak4113 **r_ak4113)
{ {
struct ak4113 *chip; struct ak4113 *chip;
......
...@@ -2184,10 +2184,9 @@ static int __devinit snd_echo_probe(struct pci_dev *pci, ...@@ -2184,10 +2184,9 @@ static int __devinit snd_echo_probe(struct pci_dev *pci,
goto ctl_error; goto ctl_error;
#endif #endif
if ((err = snd_card_register(card)) < 0) { err = snd_card_register(card);
snd_card_free(card); if (err < 0)
goto ctl_error; goto ctl_error;
}
snd_printk(KERN_INFO "Card registered: %s\n", card->longname); snd_printk(KERN_INFO "Card registered: %s\n", card->longname);
pci_set_drvdata(pci, chip); pci_set_drvdata(pci, chip);
......
...@@ -1161,13 +1161,15 @@ static long snd_mixart_BA0_read(struct snd_info_entry *entry, void *file_private ...@@ -1161,13 +1161,15 @@ static long snd_mixart_BA0_read(struct snd_info_entry *entry, void *file_private
unsigned long count, unsigned long pos) unsigned long count, unsigned long pos)
{ {
struct mixart_mgr *mgr = entry->private_data; struct mixart_mgr *mgr = entry->private_data;
unsigned long maxsize;
count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ if (pos >= MIXART_BA0_SIZE)
if(count <= 0)
return 0; return 0;
if(pos + count > MIXART_BA0_SIZE) maxsize = MIXART_BA0_SIZE - pos;
count = (long)(MIXART_BA0_SIZE - pos); if (count > maxsize)
if(copy_to_user_fromio(buf, MIXART_MEM( mgr, pos ), count)) count = maxsize;
count = count & ~3; /* make sure the read size is a multiple of 4 bytes */
if (copy_to_user_fromio(buf, MIXART_MEM(mgr, pos), count))
return -EFAULT; return -EFAULT;
return count; return count;
} }
...@@ -1180,13 +1182,15 @@ static long snd_mixart_BA1_read(struct snd_info_entry *entry, void *file_private ...@@ -1180,13 +1182,15 @@ static long snd_mixart_BA1_read(struct snd_info_entry *entry, void *file_private
unsigned long count, unsigned long pos) unsigned long count, unsigned long pos)
{ {
struct mixart_mgr *mgr = entry->private_data; struct mixart_mgr *mgr = entry->private_data;
unsigned long maxsize;
count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ if (pos > MIXART_BA1_SIZE)
if(count <= 0)
return 0; return 0;
if(pos + count > MIXART_BA1_SIZE) maxsize = MIXART_BA1_SIZE - pos;
count = (long)(MIXART_BA1_SIZE - pos); if (count > maxsize)
if(copy_to_user_fromio(buf, MIXART_REG( mgr, pos ), count)) count = maxsize;
count = count & ~3; /* make sure the read size is a multiple of 4 bytes */
if (copy_to_user_fromio(buf, MIXART_REG(mgr, pos), count))
return -EFAULT; return -EFAULT;
return count; return count;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment