diff options
author | Jerome Forissier <jerome.forissier@linaro.org> | 2017-01-05 17:38:38 +0100 |
---|---|---|
committer | Jerome Forissier <jerome.forissier@linaro.org> | 2017-01-06 14:26:20 +0100 |
commit | 61db42995e80a4554e2d9ab41f2e5a1d2796fa7d (patch) | |
tree | 5098c48effab76c29531814d542a5450e37a7641 | |
parent | 070bca9b0480af444ec693906d59d31bbe96ca10 (diff) |
core: sql_fs_write(): update meta.length only if length has changed
If the data size is not increased as a result of the write operation,
meta.length must not be changed.
Fixes: https://github.com/OP-TEE/optee_os/issues/1268
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (HiKey)
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
Reviewed-by: Igor Opaniuk <igor.opaniuk@linaro.org>
-rw-r--r-- | core/tee/tee_sql_fs.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/core/tee/tee_sql_fs.c b/core/tee/tee_sql_fs.c index 09a17ed6..b33a62b4 100644 --- a/core/tee/tee_sql_fs.c +++ b/core/tee/tee_sql_fs.c @@ -535,7 +535,6 @@ static TEE_Result sql_fs_write(struct tee_file_handle *fh, const void *buf, int start_block_num; int end_block_num; - if (!len) return TEE_SUCCESS; @@ -572,8 +571,10 @@ static TEE_Result sql_fs_write(struct tee_file_handle *fh, const void *buf, start_block_num++; } - fdp->meta.length = fdp->pos; - res = write_meta(fdp); + if (fdp->meta.length < (size_t)fdp->pos) { + fdp->meta.length = fdp->pos; + res = write_meta(fdp); + } exit: sql_fs_end_transaction_rpc(res != TEE_SUCCESS); mutex_unlock(&sql_fs_mutex); |