loader/libofw: Fix disk size truncation

At present OF_ioctl first multiplies, then casts to 64-bit, meaning at
the asm level it truncates the result to 32-bit, then zero-extends it to
64-bit to return.  Cast `n` to 64-bit before multiplying, so that the
correct result is returned.

(cherry picked from commit cd6e526e268e4fdf1c9a65b9d792e67343f52307)
This commit is contained in:
Justin Hibbits 2024-02-20 17:08:54 -05:00 committed by Warner Losh
parent 57ca2848c0
commit d6a4e48429

View file

@ -174,7 +174,7 @@ ofwd_ioctl(struct open_file *f, u_long cmd, void *data)
case DIOCGMEDIASIZE:
block_size = OF_block_size(dev->d_handle);
n = OF_blocks(dev->d_handle);
*(uint64_t *)data = (uint64_t)(n * block_size);
*(uint64_t *)data = ((uint64_t)n * block_size);
break;
default:
return (ENOTTY);