summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Forissier <jerome.forissier@linaro.org>2017-01-05 17:38:38 +0100
committerJerome Forissier <jerome.forissier@linaro.org>2017-01-06 14:26:20 +0100
commit61db42995e80a4554e2d9ab41f2e5a1d2796fa7d (patch)
tree5098c48effab76c29531814d542a5450e37a7641
parent070bca9b0480af444ec693906d59d31bbe96ca10 (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.c7
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);