irq: fix cpumask memory leak on offstack cpumask kernels
Need to free the old cpumask for affinity and pending_mask. Signed-off-by: Yinghai Lu <yinghai@kernel.org> Acked-by: Rusty Russell <rusty@rustcorp.com.au> LKML-Reference: <49D18FF0.50707@kernel.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
		
							parent
							
								
									8fe74cf053
								
							
						
					
					
						commit
						9756b15e1b
					
				| @ -482,6 +482,16 @@ static inline void init_copy_desc_masks(struct irq_desc *old_desc, | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| static inline void free_desc_masks(struct irq_desc *old_desc, | ||||
| 				   struct irq_desc *new_desc) | ||||
| { | ||||
| 	free_cpumask_var(old_desc->affinity); | ||||
| 
 | ||||
| #ifdef CONFIG_GENERIC_PENDING_IRQ | ||||
| 	free_cpumask_var(old_desc->pending_mask); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| #else /* !CONFIG_SMP */ | ||||
| 
 | ||||
| static inline bool init_alloc_desc_masks(struct irq_desc *desc, int cpu, | ||||
| @ -495,6 +505,10 @@ static inline void init_copy_desc_masks(struct irq_desc *old_desc, | ||||
| { | ||||
| } | ||||
| 
 | ||||
| static inline void free_desc_masks(struct irq_desc *old_desc, | ||||
| 				   struct irq_desc *new_desc) | ||||
| { | ||||
| } | ||||
| #endif	/* CONFIG_SMP */ | ||||
| 
 | ||||
| #endif /* _LINUX_IRQ_H */ | ||||
|  | ||||
| @ -54,6 +54,7 @@ static bool init_copy_one_irq_desc(int irq, struct irq_desc *old_desc, | ||||
| static void free_one_irq_desc(struct irq_desc *old_desc, struct irq_desc *desc) | ||||
| { | ||||
| 	free_kstat_irqs(old_desc, desc); | ||||
| 	free_desc_masks(old_desc, desc); | ||||
| 	arch_free_chip_data(old_desc, desc); | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user