mm: Create utility function for accessing a tasks commandline value
introduce get_cmdline() for retreiving the value of a processes proc/self/cmdline value. Acked-by: David Rientjes <rientjes@google.com> Acked-by: Stephen Smalley <sds@tycho.nsa.gov> Acked-by: Richard Guy Briggs <rgb@redhat.com> Signed-off-by: William Roberts <wroberts@tresys.com> Signed-off-by: Eric Paris <eparis@redhat.com>
This commit is contained in:
		
					parent
					
						
							
								147d2601d8
							
						
					
				
			
			
				commit
				
					
						a90902531a
					
				
			
		
					 2 changed files with 49 additions and 0 deletions
				
			
		|  | @ -1134,6 +1134,7 @@ void account_page_writeback(struct page *page); | ||||||
| int set_page_dirty(struct page *page); | int set_page_dirty(struct page *page); | ||||||
| int set_page_dirty_lock(struct page *page); | int set_page_dirty_lock(struct page *page); | ||||||
| int clear_page_dirty_for_io(struct page *page); | int clear_page_dirty_for_io(struct page *page); | ||||||
|  | int get_cmdline(struct task_struct *task, char *buffer, int buflen); | ||||||
| 
 | 
 | ||||||
| /* Is the vma a continuation of the stack vma above it? */ | /* Is the vma a continuation of the stack vma above it? */ | ||||||
| static inline int vma_growsdown(struct vm_area_struct *vma, unsigned long addr) | static inline int vma_growsdown(struct vm_area_struct *vma, unsigned long addr) | ||||||
|  |  | ||||||
							
								
								
									
										48
									
								
								mm/util.c
									
										
									
									
									
								
							
							
						
						
									
										48
									
								
								mm/util.c
									
										
									
									
									
								
							|  | @ -413,6 +413,54 @@ unsigned long vm_commit_limit(void) | ||||||
| 		* sysctl_overcommit_ratio / 100) + total_swap_pages; | 		* sysctl_overcommit_ratio / 100) + total_swap_pages; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * get_cmdline() - copy the cmdline value to a buffer. | ||||||
|  |  * @task:     the task whose cmdline value to copy. | ||||||
|  |  * @buffer:   the buffer to copy to. | ||||||
|  |  * @buflen:   the length of the buffer. Larger cmdline values are truncated | ||||||
|  |  *            to this length. | ||||||
|  |  * Returns the size of the cmdline field copied. Note that the copy does | ||||||
|  |  * not guarantee an ending NULL byte. | ||||||
|  |  */ | ||||||
|  | int get_cmdline(struct task_struct *task, char *buffer, int buflen) | ||||||
|  | { | ||||||
|  | 	int res = 0; | ||||||
|  | 	unsigned int len; | ||||||
|  | 	struct mm_struct *mm = get_task_mm(task); | ||||||
|  | 	if (!mm) | ||||||
|  | 		goto out; | ||||||
|  | 	if (!mm->arg_end) | ||||||
|  | 		goto out_mm;	/* Shh! No looking before we're done */ | ||||||
|  | 
 | ||||||
|  | 	len = mm->arg_end - mm->arg_start; | ||||||
|  | 
 | ||||||
|  | 	if (len > buflen) | ||||||
|  | 		len = buflen; | ||||||
|  | 
 | ||||||
|  | 	res = access_process_vm(task, mm->arg_start, buffer, len, 0); | ||||||
|  | 
 | ||||||
|  | 	/*
 | ||||||
|  | 	 * If the nul at the end of args has been overwritten, then | ||||||
|  | 	 * assume application is using setproctitle(3). | ||||||
|  | 	 */ | ||||||
|  | 	if (res > 0 && buffer[res-1] != '\0' && len < buflen) { | ||||||
|  | 		len = strnlen(buffer, res); | ||||||
|  | 		if (len < res) { | ||||||
|  | 			res = len; | ||||||
|  | 		} else { | ||||||
|  | 			len = mm->env_end - mm->env_start; | ||||||
|  | 			if (len > buflen - res) | ||||||
|  | 				len = buflen - res; | ||||||
|  | 			res += access_process_vm(task, mm->env_start, | ||||||
|  | 						 buffer+res, len, 0); | ||||||
|  | 			res = strnlen(buffer, res); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | out_mm: | ||||||
|  | 	mmput(mm); | ||||||
|  | out: | ||||||
|  | 	return res; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| /* Tracepoints definitions. */ | /* Tracepoints definitions. */ | ||||||
| EXPORT_TRACEPOINT_SYMBOL(kmalloc); | EXPORT_TRACEPOINT_SYMBOL(kmalloc); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 William Roberts
				William Roberts