OSDN Git Service

ALSA: info: Use kvzalloc() for a temporary write buffer
authorTakashi Iwai <tiwai@suse.de>
Mon, 22 May 2017 15:39:13 +0000 (17:39 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 23 May 2017 05:04:06 +0000 (07:04 +0200)
We used to use kmalloc (more exactly, krealloc()) for creating and
growing the temporary buffer for text proc write.  It can grow up to
16kB, and it's already a bit doubtful whether it's always safe to use
kmalloc().  With the recent addition of kvmalloc(), we can have a
better chance for succeed of memory allocation, so let's switch to
that new API.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/info.c

index 8ab72e0..fc14ebe 100644 (file)
@@ -344,12 +344,12 @@ static ssize_t snd_info_text_entry_write(struct file *file,
                }
        }
        if (next > buf->len) {
-               char *nbuf = krealloc(buf->buffer, PAGE_ALIGN(next),
-                                     GFP_KERNEL | __GFP_ZERO);
+               char *nbuf = kvzalloc(PAGE_ALIGN(next), GFP_KERNEL);
                if (!nbuf) {
                        err = -ENOMEM;
                        goto error;
                }
+               kvfree(buf->buffer);
                buf->buffer = nbuf;
                buf->len = PAGE_ALIGN(next);
        }
@@ -427,7 +427,7 @@ static int snd_info_text_entry_release(struct inode *inode, struct file *file)
        single_release(inode, file);
        kfree(data->rbuffer);
        if (data->wbuffer) {
-               kfree(data->wbuffer->buffer);
+               kvfree(data->wbuffer->buffer);
                kfree(data->wbuffer);
        }