From 1aa8877afec431a97e5c41064deef3bf1ee6200f Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Mon, 31 Aug 2009 13:18:23 +0000 Subject: [PATCH] Don't read or write more bytes than the buffer you provide is large. On reading it would overwrite memory and on writing it would crash further down when the buffer is accessed. Fixes #4383. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32857 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../partitioning_systems/intel/PartitionMapWriter.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/add-ons/kernel/partitioning_systems/intel/PartitionMapWriter.cpp b/src/add-ons/kernel/partitioning_systems/intel/PartitionMapWriter.cpp index 6a064b1e6c..5469b54c9e 100644 --- a/src/add-ons/kernel/partitioning_systems/intel/PartitionMapWriter.cpp +++ b/src/add-ons/kernel/partitioning_systems/intel/PartitionMapWriter.cpp @@ -247,8 +247,8 @@ PartitionMapWriter::_ReadBlock(off_t partitionOffset, if (partitionOffset < 0) return B_BAD_VALUE; // TODO: If fBlockSize > sizeof(partition_table) then stop/read NULL after - if (read_pos(fDeviceFD, partitionOffset, &partitionTable, fBlockSize) - != fBlockSize) { + if (read_pos(fDeviceFD, partitionOffset, &partitionTable, + sizeof(partitionTable)) != sizeof(partitionTable)) { status_t error = errno; if (error == B_OK) error = B_IO_ERROR; @@ -266,9 +266,10 @@ PartitionMapWriter::_WriteBlock(off_t partitionOffset, { if (partitionOffset < 0) return B_BAD_VALUE; - // TODO: If fBlockSize > sizeof(partition_table) then stop/write NULL after - if (write_pos(fDeviceFD, partitionOffset, &partitionTable, fBlockSize) - != fBlockSize) { + // TODO: maybe clear the rest of the block if + // fBlockSize > sizeof(partition_table)? + if (write_pos(fDeviceFD, partitionOffset, &partitionTable, + sizeof(partitionTable)) != sizeof(partitionTable)) { status_t error = errno; if (error == B_OK) error = B_IO_ERROR;