summaryrefslogtreecommitdiffstats
path: root/cmds
diff options
context:
space:
mode:
authorrepo sync <cywang@google.com>2009-08-05 18:06:27 +0800
committerrepo sync <cywang@google.com>2009-08-10 16:13:00 +0800
commitf1ab36f9ab82220de679ff0ca5164995b7d30214 (patch)
treebdf73fa71e3ac244eb57ba123b634d5ca78b6f52 /cmds
parent0f0767d4daa847314bd9473ef3650d26d1c51c8c (diff)
downloadframeworks_base-f1ab36f9ab82220de679ff0ca5164995b7d30214.zip
frameworks_base-f1ab36f9ab82220de679ff0ca5164995b7d30214.tar.gz
frameworks_base-f1ab36f9ab82220de679ff0ca5164995b7d30214.tar.bz2
Fix network order for marshalling in keystore interface.
This will fix the endian issue for heterogeneous architectures in keystore marshalling interface.
Diffstat (limited to 'cmds')
-rw-r--r--cmds/keystore/netkeystore.c1
-rw-r--r--cmds/keystore/netkeystore.h8
2 files changed, 8 insertions, 1 deletions
diff --git a/cmds/keystore/netkeystore.c b/cmds/keystore/netkeystore.c
index 637e0d8..bdd5960 100644
--- a/cmds/keystore/netkeystore.c
+++ b/cmds/keystore/netkeystore.c
@@ -242,6 +242,7 @@ static int set_read_timeout(int socket)
{
struct timeval tv;
tv.tv_sec = READ_TIMEOUT;
+ tv.tv_usec = 0;
if (setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof tv))
{
LOGE("setsockopt failed");
diff --git a/cmds/keystore/netkeystore.h b/cmds/keystore/netkeystore.h
index a87a667..d80ddae 100644
--- a/cmds/keystore/netkeystore.h
+++ b/cmds/keystore/netkeystore.h
@@ -19,6 +19,7 @@
#define __NETKEYSTORE_H__
#include <stdio.h>
+#include <arpa/inet.h>
#include <cutils/sockets.h>
#include <cutils/log.h>
@@ -68,6 +69,8 @@ static inline int read_marshal(int s, LPC_MARSHAL *cmd)
LOGE("failed to read header\n");
return -1;
}
+ cmd->len = ntohl(cmd->len);
+ cmd->opcode = ntohl(cmd->opcode);
if (cmd->len > BUFFER_MAX) {
LOGE("invalid size %d\n", cmd->len);
return -1;
@@ -82,11 +85,14 @@ static inline int read_marshal(int s, LPC_MARSHAL *cmd)
static inline int write_marshal(int s, LPC_MARSHAL *cmd)
{
+ int len = cmd->len;
+ cmd->len = htonl(cmd->len);
+ cmd->opcode = htonl(cmd->opcode);
if (writex(s, cmd, 2 * sizeof(uint32_t))) {
LOGE("failed to write marshal header\n");
return -1;
}
- if (writex(s, cmd->data, cmd->len)) {
+ if (writex(s, cmd->data, len)) {
LOGE("failed to write marshal data\n");
return -1;
}