From be24d8198c56f8d2d6dc67c40a78c64b46860819 Mon Sep 17 00:00:00 2001 From: Anti Sullin Date: Mon, 17 May 2010 23:19:22 +0000 Subject: Write MSRs in a platform and compiler-independent form 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. Corresponding to flashrom svn r999. Signed-off-by: Anti Sullin Acked-by: Michael Karcher --- physmap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'physmap.c') diff --git a/physmap.c b/physmap.c index 31db470..03fef95 100644 --- a/physmap.c +++ b/physmap.c @@ -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); -- cgit v1.1