diff options
author | mkarcher <mkarcher@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1> | 2010-05-17 23:19:22 +0000 |
---|---|---|
committer | mkarcher <mkarcher@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1> | 2010-05-17 23:19:22 +0000 |
commit | 042b33187def4104b765839a6b4133dcffc3a66e (patch) | |
tree | c26570ac185a8f1571728dfef2495f0b679dc43e /physmap.c | |
parent | a539f3f5e772930fdc8b1d2fb11201802dfde8c1 (diff) | |
download | flashrom-042b33187def4104b765839a6b4133dcffc3a66e.tar.gz |
msr_t memory layout may depend on compiler; with optimizations this
may lead to writing incorrect data to MSR.
Create a temporary buffer with correct layout to avoid this problem.
Signed-off-by: Anti Sullin <anti.sullin@artecdesign.ee>
Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@999 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'physmap.c')
-rw-r--r-- | physmap.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -282,13 +282,17 @@ msr_t rdmsr(int addr) int wrmsr(int addr, msr_t msr) { + uint32_t buf[2]; + buf[0] = msr.lo; + buf[1] = msr.hi; + if (lseek(fd_msr, (off_t) addr, SEEK_SET) == -1) { perror("Could not lseek() to MSR"); close(fd_msr); exit(1); } - if (write(fd_msr, &msr, 8) != 8 && errno != EIO) { + if (write(fd_msr, buf, 8) != 8 && errno != EIO) { perror("Could not write() MSR"); close(fd_msr); exit(1); |