CRIS: check for memory allocation
PATCH 1/1 CRIS: check for memory allocation
This patch adds checking for allocated memory. Indents and spaces are added to be familiar with the kernel coding style.
Signed-off-by Cyrill Gorcunov <[email protected]>
---
arch/cris/kernel/profile.c | 81 ++++++++++++++++++++++++++------------------ 1 files changed, 48 insertions(+), 33 deletions(-)
arch/cris/kernel/profile.c +48 -33
@@ -15,39 +15,47 @@ static int prof_running = 0;void cris_profile_sample (struct pt_regs * regs) { -if (!prof_running) -return ; -if (user_mode (regs)) - *(unsigned int *)sample_buffer_pos = current->pid; -else - *(unsigned int *)sample_buffer_pos =0 ; - *(unsigned int *)(sample_buffer_pos +4 ) =instruction_pointer (regs); - sample_buffer_pos +=8 ; -if (sample_buffer_pos == sample_buffer +SAMPLE_BUFFER_SIZE ) - sample_buffer_pos = sample_buffer; +if (!prof_running) +return ; + +if (user_mode (regs)) + *(unsigned int *)sample_buffer_pos = current->pid; +else + *(unsigned int *)sample_buffer_pos =0 ; + + *(unsigned int *)(sample_buffer_pos +4 ) =instruction_pointer (regs); + sample_buffer_pos +=8 ; + +if (sample_buffer_pos == sample_buffer +SAMPLE_BUFFER_SIZE ) + sample_buffer_pos = sample_buffer; }static ssize_t -read_cris_profile (struct file *file,char __user *buf,size_t count,loff_t *ppos) +read_cris_profile (struct file *file,char __user *buf, +size_t count,loff_t *ppos) { -unsigned long p = *ppos; -if (p >SAMPLE_BUFFER_SIZE ) -return 0 ; -if (p + count >SAMPLE_BUFFER_SIZE ) - count =SAMPLE_BUFFER_SIZE - p; -if (copy_to_user (buf, sample_buffer + p,count)) +unsigned long p = *ppos; + +if (p >SAMPLE_BUFFER_SIZE ) +return 0 ; + +if (p + count >SAMPLE_BUFFER_SIZE ) + count =SAMPLE_BUFFER_SIZE - p; +if (copy_to_user (buf, sample_buffer + p,count))return -EFAULT ; -memset (sample_buffer + p,0 , count); - *ppos += count; -return count; + +memset (sample_buffer + p,0 , count); + *ppos += count; + +return count; }static ssize_t write_cris_profile (struct file *file,const char __user *buf, -size_t count,loff_t *ppos) +size_t count,loff_t *ppos) { - sample_buffer_pos = sample_buffer; -memset (sample_buffer,0 ,SAMPLE_BUFFER_SIZE ); + sample_buffer_pos = sample_buffer; +memset (sample_buffer,0 ,SAMPLE_BUFFER_SIZE ); }static const struct file_operations cris_proc_profile_operations = {
@@ -58,16 +66,23 @@ static const struct file_operations cris_proc_profile_operations = {static int __init init_cris_profile (void ) { -struct proc_dir_entry *entry; - sample_buffer =kmalloc (SAMPLE_BUFFER_SIZE ,GFP_KERNEL ); - sample_buffer_pos = sample_buffer; - entry =create_proc_entry ("system_profile" ,S_IWUSR |S_IRUGO ,NULL ); -if (entry) { - entry->proc_fops = &cris_proc_profile_operations; - entry->size =SAMPLE_BUFFER_SIZE ; - } - prof_running =1 ; -return 0 ; +struct proc_dir_entry *entry; + + sample_buffer =kmalloc (SAMPLE_BUFFER_SIZE ,GFP_KERNEL ); +if (!sample_buffer) { +return -ENOMEM ; + } + + sample_buffer_pos = sample_buffer; + + entry =create_proc_entry ("system_profile" ,S_IWUSR |S_IRUGO ,NULL ); +if (entry) { + entry->proc_fops = &cris_proc_profile_operations; + entry->size =SAMPLE_BUFFER_SIZE ; + } + prof_running =1 ; + +return 0 ; }__initcall (init_cris_profile);