In proc/slab.c, functions parse_slabinfo20() and parse_slabinfo11(),
sscanf() might overflow curr->name, because "String input conversions
store a terminating null byte ('\0') to mark the end of the input; the
maximum field width does not include this terminator."
Add one byte to name[] for this terminator.
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _PROC_SLAB_H
 | 
						|
#define _PROC_SLAB_H
 | 
						|
 | 
						|
#define SLAB_INFO_NAME_LEN      128
 | 
						|
 | 
						|
struct slab_info {
 | 
						|
	char name[SLAB_INFO_NAME_LEN+1];  /* name of this cache */
 | 
						|
	struct slab_info *next;
 | 
						|
	unsigned long cache_size;       /* size of entire cache */
 | 
						|
	unsigned nr_objs;               /* number of objects in this cache */
 | 
						|
	unsigned nr_active_objs;        /* number of active objects */
 | 
						|
	unsigned obj_size;              /* size of each object */
 | 
						|
	unsigned objs_per_slab;         /* number of objects per slab */
 | 
						|
	unsigned pages_per_slab;        /* number of pages per slab */
 | 
						|
	unsigned nr_slabs;              /* number of slabs in this cache */
 | 
						|
	unsigned nr_active_slabs;       /* number of active slabs */
 | 
						|
	unsigned use;                   /* percent full: total / active */
 | 
						|
};
 | 
						|
 | 
						|
struct slab_stat {
 | 
						|
	unsigned long total_size;       /* size of all objects */
 | 
						|
	unsigned long active_size;      /* size of all active objects */
 | 
						|
	unsigned nr_objs;               /* number of objects, among all caches */
 | 
						|
	unsigned nr_active_objs;        /* number of active objects, among all caches */
 | 
						|
	unsigned nr_pages;              /* number of pages consumed by all objects */
 | 
						|
	unsigned nr_slabs;              /* number of slabs, among all caches */
 | 
						|
	unsigned nr_active_slabs;       /* number of active slabs, among all caches */
 | 
						|
	unsigned nr_caches;             /* number of caches */
 | 
						|
	unsigned nr_active_caches;      /* number of active caches */
 | 
						|
	unsigned avg_obj_size;          /* average object size */
 | 
						|
	unsigned min_obj_size;          /* size of smallest object */
 | 
						|
	unsigned max_obj_size;          /* size of largest object */
 | 
						|
};
 | 
						|
 | 
						|
extern void put_slabinfo(struct slab_info *);
 | 
						|
extern void free_slabinfo(struct slab_info *);
 | 
						|
extern int get_slabinfo(struct slab_info **, struct slab_stat *);
 | 
						|
 | 
						|
#endif /* _PROC_SLAB_H */
 |