powerpc/64: Fix strncpy() related build failures with GCC 8.1
GCC 8.1 warns about possible string truncation:
  arch/powerpc/kernel/nvram_64.c:1042:2: error: 'strncpy' specified
  bound 12 equals destination size [-Werror=stringop-truncation]
    strncpy(new_part->header.name, name, 12);
  arch/powerpc/platforms/ps3/repository.c:106:2: error: 'strncpy'
  output truncated before terminating nul copying 8 bytes from a
  string of the same length [-Werror=stringop-truncation]
    strncpy((char *)&n, text, 8);
Fix it by using memcpy(). To make that safe we need to ensure the
destination is pre-zeroed. Use kzalloc() in the nvram code and
initialise the u64 to zero in the ps3 code.
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
[mpe: Use kzalloc() in the nvram code, flesh out change log]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
			
			
This commit is contained in:
		
							parent
							
								
									2135a6ec3e
								
							
						
					
					
						commit
						c959988118
					
				| @ -1030,7 +1030,7 @@ loff_t __init nvram_create_partition(const char *name, int sig, | ||||
| 		return -ENOSPC; | ||||
| 	 | ||||
| 	/* Create our OS partition */ | ||||
| 	new_part = kmalloc(sizeof(*new_part), GFP_KERNEL); | ||||
| 	new_part = kzalloc(sizeof(*new_part), GFP_KERNEL); | ||||
| 	if (!new_part) { | ||||
| 		pr_err("%s: kmalloc failed\n", __func__); | ||||
| 		return -ENOMEM; | ||||
| @ -1039,7 +1039,7 @@ loff_t __init nvram_create_partition(const char *name, int sig, | ||||
| 	new_part->index = free_part->index; | ||||
| 	new_part->header.signature = sig; | ||||
| 	new_part->header.length = size; | ||||
| 	strncpy(new_part->header.name, name, 12); | ||||
| 	memcpy(new_part->header.name, name, strnlen(name, sizeof(new_part->header.name))); | ||||
| 	new_part->header.checksum = nvram_checksum(&new_part->header); | ||||
| 
 | ||||
| 	rc = nvram_write_header(new_part); | ||||
|  | ||||
| @ -101,9 +101,9 @@ static u64 make_first_field(const char *text, u64 index) | ||||
| 
 | ||||
| static u64 make_field(const char *text, u64 index) | ||||
| { | ||||
| 	u64 n; | ||||
| 	u64 n = 0; | ||||
| 
 | ||||
| 	strncpy((char *)&n, text, 8); | ||||
| 	memcpy((char *)&n, text, strnlen(text, sizeof(n))); | ||||
| 	return n + index; | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user