diff options
author | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-20 01:06:17 +0000 |
---|---|---|
committer | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-20 01:06:17 +0000 |
commit | 0abca74436402cf7ac8bc4db05e35e3e215ba142 (patch) | |
tree | 0bf82657be37743a6c5df560095a96b0c0d827b2 /sandbox/src/crosscall_params.h | |
parent | 665e57e0aa1502af457c40a7165d85ce2a6cc0a1 (diff) | |
download | chromium_src-0abca74436402cf7ac8bc4db05e35e3e215ba142.zip chromium_src-0abca74436402cf7ac8bc4db05e35e3e215ba142.tar.gz chromium_src-0abca74436402cf7ac8bc4db05e35e3e215ba142.tar.bz2 |
Sbox IPC fix
BUG=52682
TEST=included
Review URL: http://codereview.chromium.org/3142022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56796 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sandbox/src/crosscall_params.h')
-rw-r--r-- | sandbox/src/crosscall_params.h | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/sandbox/src/crosscall_params.h b/sandbox/src/crosscall_params.h index 939925c..4c1e4fe 100644 --- a/sandbox/src/crosscall_params.h +++ b/sandbox/src/crosscall_params.h @@ -169,30 +169,33 @@ class CrossCallParams { // blob to be complex. // // As is, this class assumes that the layout of the blob is as follows. Assume -// that NUMBER_PARAMS = 2: +// that NUMBER_PARAMS = 2 and a 32-bit build: // -// [ tag 4 bytes] -// [ IsOnOut 4 bytes] -// [ call return 52 bytes] -// [ params count 4 bytes] -// [ parameter 0 type 4 bytes] -// [ parameter 0 /\ 4 bytes] ---delta to ---\ -// [ parameter 0 size 4 bytes] | -// [ parameter 1 type 4 bytes] | -// [ parameter 1 /\ 4 bytes] | -// [ parameter 1 size 4 bytes] | -// [ parameter 2 type 4 bytes] | -// [ parameter 2 /\ 4 bytes] ----------------------\ -// [ parameter 2 size 4 bytes] | | -// |-------------------------| | | -// | | <--------------/ | -// | | | -// | | <---------------------/ -// |-------------------------| +// [ tag 4 bytes] +// [ IsOnOut 4 bytes] +// [ call return 52 bytes] +// [ params count 4 bytes] +// [ parameter 0 type 4 bytes] +// [ parameter 0 offset 4 bytes] ---delta to ---\ +// [ parameter 0 size 4 bytes] | +// [ parameter 1 type 4 bytes] | +// [ parameter 1 offset 4 bytes] ---------------|--\ +// [ parameter 1 size 4 bytes] | | +// [ parameter 2 type 4 bytes] | | +// [ parameter 2 offset 4 bytes] ----------------------\ +// [ parameter 2 size 4 bytes] | | | +// |---------------------------| | | | +// | value 0 (x bytes) | <--------------/ | | +// | value 1 (y bytes) | <-----------------/ | +// | | | +// | end of buffer | <---------------------/ +// |---------------------------| // // Note that the actual number of params is NUMBER_PARAMS + 1 // so that the size of each actual param can be computed from the difference -// between one parameter and the next down +// between one parameter and the next down. The offset of the last param +// points to the end of the buffer and the type and size are undefined. +// template <size_t NUMBER_PARAMS, size_t BLOCK_SIZE> class ActualCallParams : public CrossCallParams { public: @@ -209,6 +212,14 @@ class ActualCallParams : public CrossCallParams { param_info_[0].offset_ = parameters_ - reinterpret_cast<char*>(this); } + // Testing-only method. Allows setting the apparent size to a wrong value. + // returns the previous size. + size_t OverrideSize(size_t new_size) { + size_t previous_size = param_info_[NUMBER_PARAMS].offset_; + param_info_[NUMBER_PARAMS].offset_ = new_size; + return previous_size; + } + // Copies each paramter into the internal buffer. For each you must supply: // index: 0 for the first param, 1 for the next an so on bool CopyParamIn(size_t index, const void* parameter_address, size_t size, |