tbl->name = snd_kmalloc_strdup(str, GFP_KERNEL); 
tbl->name = kstrdup(str, GFP_KERNEL); 
static void snd_mixer_oss_proc_write(snd_info_entry_t *entry,				     snd_info_buffer_t * buffer){	snd_mixer_oss_t *mixer = entry->private_data;	char line[128], str[32], idxstr[16], *cptr;	int ch, idx;	struct snd_mixer_oss_assign_table *tbl;	struct slot *slot;	while (!snd_info_get_line(buffer, line, sizeof(line))) {		cptr = snd_info_get_str(str, line, sizeof(str));		for (ch = 0; ch < SNDRV_OSS_MAX_MIXERS; ch++)			if (oss_mixer_names[ch] && strcmp(oss_mixer_names[ch], str) == 0)				break;		if (ch >= SNDRV_OSS_MAX_MIXERS) {			snd_printk(KERN_ERR "mixer_oss: invalid OSS volume '%s'\n", str);			continue;		}		cptr = snd_info_get_str(str, cptr, sizeof(str));		if (! *str) {			/* remove the entry */			down(&mixer->reg_mutex);			mixer_slot_clear(&mixer->slots[ch]);			up(&mixer->reg_mutex);			continue;		}		snd_info_get_str(idxstr, cptr, sizeof(idxstr));		idx = simple_strtoul(idxstr, NULL, 10);		if (idx >= 0x4000) { /* too big */			snd_printk(KERN_ERR "mixer_oss: invalid index %d\n", idx);			continue;		}		down(&mixer->reg_mutex);		slot = (struct slot *)mixer->slots[ch].private_data;		if (slot && slot->assigned &&		    slot->assigned->index == idx && ! strcmp(slot->assigned->name, str))			/* not changed */			goto __unlock;		tbl = kmalloc(sizeof(*tbl), GFP_KERNEL);		if (! tbl) {			snd_printk(KERN_ERR "mixer_oss: no memory\n");			goto __unlock;		}		tbl->oss_id = ch;		tbl->name = snd_kmalloc_strdup(str, GFP_KERNEL);		if (! tbl->name) {			kfree(tbl);			goto __unlock;		}		tbl->index = idx;		if (snd_mixer_oss_build_input(mixer, tbl, 1, 1) <= 0) {			kfree(tbl->name);			kfree(tbl);		}	__unlock:		up(&mixer->reg_mutex);	}}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/543537bd922692bc978e2e356fcd8bfc9c2ee7d5/mixer_oss.c/buggy/sound/core/oss/mixer_oss.c