summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gordeev <agordeev@linux.ibm.com>2023-01-25 21:16:10 +0300
committerHeiko Carstens <hca@linux.ibm.com>2023-01-31 20:56:36 +0300
commitcbc29f107e51b1cc7d1e7b0bbe0691a1224205f1 (patch)
tree674a19545b29fa14aeb905f61785eb6edb5db333
parent0c6924c262e819c4997b9cae0df6bd6e7b0b8754 (diff)
downloadlinux-cbc29f107e51b1cc7d1e7b0bbe0691a1224205f1.tar.xz
s390/mem_detect: do not update output parameters on failure
Function __get_mem_detect_block() resets start and end output parameters in case of invalid mem_detect array index is provided. That violates the rule of sparing the output on fail path and leads e.g to a below anomaly: for_each_mem_detect_block(i, &start, &end) continue; One would expect start and end contain addresses of the last memory block (if available), but in fact the two will be reset to zeroes. That is not how an iterator is expected to work. Reviewed-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
-rw-r--r--arch/s390/include/asm/mem_detect.h5
1 files changed, 1 insertions, 4 deletions
diff --git a/arch/s390/include/asm/mem_detect.h b/arch/s390/include/asm/mem_detect.h
index a7c922a69050..058ac2647eb7 100644
--- a/arch/s390/include/asm/mem_detect.h
+++ b/arch/s390/include/asm/mem_detect.h
@@ -40,11 +40,8 @@ void add_mem_detect_block(u64 start, u64 end);
static inline int __get_mem_detect_block(u32 n, unsigned long *start,
unsigned long *end)
{
- if (n >= mem_detect.count) {
- *start = 0;
- *end = 0;
+ if (n >= mem_detect.count)
return -1;
- }
if (n < MEM_INLINED_ENTRIES) {
*start = (unsigned long)mem_detect.entries[n].start;