libbpf: Fix gen_loader assumption on number of programs.
libbpf's obj->nr_programs includes static and global functions. That number
could be higher than the actual number of bpf programs going be loaded by
gen_loader. Passing larger nr_programs to bpf_gen__init() doesn't hurt. Those
exra stack slots will stay as zero. bpf_gen__finish() needs to check that
actual number of progs that gen_loader saw is less than or equal to
obj->nr_programs.
Fixes: ba05fd36b8 ("libbpf: Perform map fd cleanup for gen_loader in case of error")
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									77ab714f00
								
							
						
					
					
						commit
						259172bb65
					
				| @ -371,8 +371,9 @@ int bpf_gen__finish(struct bpf_gen *gen, int nr_progs, int nr_maps) | |||||||
| { | { | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	if (nr_progs != gen->nr_progs || nr_maps != gen->nr_maps) { | 	if (nr_progs < gen->nr_progs || nr_maps != gen->nr_maps) { | ||||||
| 		pr_warn("progs/maps mismatch\n"); | 		pr_warn("nr_progs %d/%d nr_maps %d/%d mismatch\n", | ||||||
|  | 			nr_progs, gen->nr_progs, nr_maps, gen->nr_maps); | ||||||
| 		gen->error = -EFAULT; | 		gen->error = -EFAULT; | ||||||
| 		return gen->error; | 		return gen->error; | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user