# HG changeset patch
# User Tim Deegan <Tim.Deegan@xxxxxxxxxxxxx>
# Date 1170089422 0
# Node ID 21d6135f522fb309b830f803c4b6d289f2b5e092
# Parent 99d36a1530249cc4b918e83dfc5a62324f63b3bf
# Parent 44eb80f50725557a74f491bae0bd9c4a30bdf793
Merge
---
xen/acm/acm_chinesewall_hooks.c | 44 +++++------
xen/acm/acm_core.c | 44 +++--------
xen/acm/acm_policy.c | 106 +++++++++++++-------------
xen/acm/acm_simple_type_enforcement_hooks.c | 34 ++++----
xen/arch/ia64/linux-xen/setup.c | 5 -
xen/arch/ia64/xen/dom_fw.c | 49 ++++++------
xen/arch/ia64/xen/domain.c | 3
xen/arch/ia64/xen/gdbstub.c | 2
xen/arch/ia64/xen/oprofile/perfmon.c | 2
xen/arch/powerpc/domain_build.c | 2
xen/arch/powerpc/of-devtree.c | 3
xen/arch/powerpc/ofd_fixup.c | 2
xen/arch/x86/cpu/common.c | 6 -
xen/arch/x86/cpu/cyrix.c | 7 -
xen/arch/x86/cpu/intel.c | 2
xen/arch/x86/dmi_scan.c | 2
xen/arch/x86/domain_build.c | 2
xen/arch/x86/hvm/intercept.c | 6 -
xen/arch/x86/setup.c | 28 +++----
xen/common/kexec.c | 2
xen/common/keyhandler.c | 5 -
xen/common/libelf/libelf-dominfo.c | 16 ++--
xen/common/libelf/libelf-private.h | 13 +--
xen/common/perfc.c | 3
xen/common/rangeset.c | 2
xen/common/string.c | 111 ++++++----------------------
xen/drivers/char/console.c | 4 -
xen/include/acm/acm_endian.h | 52 ++-----------
xen/include/xen/byteorder/big_endian.h | 4 -
xen/include/xen/byteorder/little_endian.h | 4 -
xen/include/xen/string.h | 29 +++----
31 files changed, 238 insertions(+), 356 deletions(-)
diff -r 99d36a153024 -r 21d6135f522f xen/acm/acm_chinesewall_hooks.c
--- a/xen/acm/acm_chinesewall_hooks.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/acm/acm_chinesewall_hooks.c Mon Jan 29 16:50:22 2007 +0000
@@ -132,26 +132,26 @@ static int chwall_dump_policy(u8 * buf,
if (buf_size < sizeof(struct acm_chwall_policy_buffer))
return -EINVAL;
- chwall_buf->chwall_max_types = htonl(chwall_bin_pol.max_types);
- chwall_buf->chwall_max_ssidrefs = htonl(chwall_bin_pol.max_ssidrefs);
- chwall_buf->policy_code = htonl(ACM_CHINESE_WALL_POLICY);
+ chwall_buf->chwall_max_types = cpu_to_be32(chwall_bin_pol.max_types);
+ chwall_buf->chwall_max_ssidrefs = cpu_to_be32(chwall_bin_pol.max_ssidrefs);
+ chwall_buf->policy_code = cpu_to_be32(ACM_CHINESE_WALL_POLICY);
chwall_buf->chwall_ssid_offset =
- htonl(sizeof(struct acm_chwall_policy_buffer));
+ cpu_to_be32(sizeof(struct acm_chwall_policy_buffer));
chwall_buf->chwall_max_conflictsets =
- htonl(chwall_bin_pol.max_conflictsets);
+ cpu_to_be32(chwall_bin_pol.max_conflictsets);
chwall_buf->chwall_conflict_sets_offset =
- htonl(ntohl(chwall_buf->chwall_ssid_offset) +
+ cpu_to_be32(be32_to_cpu(chwall_buf->chwall_ssid_offset) +
sizeof(domaintype_t) * chwall_bin_pol.max_ssidrefs *
chwall_bin_pol.max_types);
chwall_buf->chwall_running_types_offset =
- htonl(ntohl(chwall_buf->chwall_conflict_sets_offset) +
+ cpu_to_be32(be32_to_cpu(chwall_buf->chwall_conflict_sets_offset) +
sizeof(domaintype_t) * chwall_bin_pol.max_conflictsets *
chwall_bin_pol.max_types);
chwall_buf->chwall_conflict_aggregate_offset =
- htonl(ntohl(chwall_buf->chwall_running_types_offset) +
+ cpu_to_be32(be32_to_cpu(chwall_buf->chwall_running_types_offset) +
sizeof(domaintype_t) * chwall_bin_pol.max_types);
- ret = ntohl(chwall_buf->chwall_conflict_aggregate_offset) +
+ ret = be32_to_cpu(chwall_buf->chwall_conflict_aggregate_offset) +
sizeof(domaintype_t) * chwall_bin_pol.max_types;
ret = (ret + 7) & ~7;
@@ -160,21 +160,21 @@ static int chwall_dump_policy(u8 * buf,
return -EINVAL;
/* now copy buffers over */
- arrcpy16((u16 *) (buf + ntohl(chwall_buf->chwall_ssid_offset)),
+ arrcpy16((u16 *) (buf + be32_to_cpu(chwall_buf->chwall_ssid_offset)),
chwall_bin_pol.ssidrefs,
chwall_bin_pol.max_ssidrefs * chwall_bin_pol.max_types);
arrcpy16((u16 *) (buf +
- ntohl(chwall_buf->chwall_conflict_sets_offset)),
+ be32_to_cpu(chwall_buf->chwall_conflict_sets_offset)),
chwall_bin_pol.conflict_sets,
chwall_bin_pol.max_conflictsets * chwall_bin_pol.max_types);
arrcpy16((u16 *) (buf +
- ntohl(chwall_buf->chwall_running_types_offset)),
+ be32_to_cpu(chwall_buf->chwall_running_types_offset)),
chwall_bin_pol.running_types, chwall_bin_pol.max_types);
arrcpy16((u16 *) (buf +
- ntohl(chwall_buf->chwall_conflict_aggregate_offset)),
+
be32_to_cpu(chwall_buf->chwall_conflict_aggregate_offset)),
chwall_bin_pol.conflict_aggregate_set,
chwall_bin_pol.max_types);
return ret;
@@ -267,20 +267,20 @@ static int chwall_set_policy(u8 * buf, u
return -EINVAL;
/* rewrite the policy due to endianess */
- chwall_buf->policy_code = ntohl(chwall_buf->policy_code);
- chwall_buf->policy_version = ntohl(chwall_buf->policy_version);
- chwall_buf->chwall_max_types = ntohl(chwall_buf->chwall_max_types);
+ chwall_buf->policy_code = be32_to_cpu(chwall_buf->policy_code);
+ chwall_buf->policy_version = be32_to_cpu(chwall_buf->policy_version);
+ chwall_buf->chwall_max_types = be32_to_cpu(chwall_buf->chwall_max_types);
chwall_buf->chwall_max_ssidrefs =
- ntohl(chwall_buf->chwall_max_ssidrefs);
+ be32_to_cpu(chwall_buf->chwall_max_ssidrefs);
chwall_buf->chwall_max_conflictsets =
- ntohl(chwall_buf->chwall_max_conflictsets);
- chwall_buf->chwall_ssid_offset = ntohl(chwall_buf->chwall_ssid_offset);
+ be32_to_cpu(chwall_buf->chwall_max_conflictsets);
+ chwall_buf->chwall_ssid_offset =
be32_to_cpu(chwall_buf->chwall_ssid_offset);
chwall_buf->chwall_conflict_sets_offset =
- ntohl(chwall_buf->chwall_conflict_sets_offset);
+ be32_to_cpu(chwall_buf->chwall_conflict_sets_offset);
chwall_buf->chwall_running_types_offset =
- ntohl(chwall_buf->chwall_running_types_offset);
+ be32_to_cpu(chwall_buf->chwall_running_types_offset);
chwall_buf->chwall_conflict_aggregate_offset =
- ntohl(chwall_buf->chwall_conflict_aggregate_offset);
+ be32_to_cpu(chwall_buf->chwall_conflict_aggregate_offset);
/* policy type and version checks */
if ((chwall_buf->policy_code != ACM_CHINESE_WALL_POLICY) ||
diff -r 99d36a153024 -r 21d6135f522f xen/acm/acm_core.c
--- a/xen/acm/acm_core.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/acm/acm_core.c Mon Jan 29 16:50:22 2007 +0000
@@ -62,35 +62,20 @@ struct acm_binary_policy acm_bin_pol;
/* acm binary policy lock */
DEFINE_RWLOCK(acm_bin_pol_rwlock);
-/* until we have endian support in Xen, we discover it at runtime */
-u8 little_endian = 1;
-void
-acm_set_endian(void)
-{
- u32 test = 1;
- if (*((u8 *)&test) == 1)
- {
- printkd("ACM module running in LITTLE ENDIAN.\n");
- little_endian = 1;
- }
- else
- {
- printkd("ACM module running in BIG ENDIAN.\n");
- little_endian = 0;
- }
-}
-
-int
-acm_set_policy_reference(u8 * buf, u32 buf_size)
+int
+acm_set_policy_reference(u8 *buf, u32 buf_size)
{
struct acm_policy_reference_buffer *pr = (struct
acm_policy_reference_buffer *)buf;
- acm_bin_pol.policy_reference_name = (char *)xmalloc_array(u8,
ntohl(pr->len));
+ acm_bin_pol.policy_reference_name = (char *)xmalloc_array(u8,
be32_to_cpu(pr->len));
if (!acm_bin_pol.policy_reference_name)
return -ENOMEM;
- strcpy(acm_bin_pol.policy_reference_name, (char *)(buf + sizeof(struct
acm_policy_reference_buffer)));
- printk("%s: Activating policy %s\n", __func__,
acm_bin_pol.policy_reference_name);
+ strlcpy(acm_bin_pol.policy_reference_name,
+ (char *)(buf + sizeof(struct acm_policy_reference_buffer)),
+ be32_to_cpu(pr->len));
+ printk("%s: Activating policy %s\n", __func__,
+ acm_bin_pol.policy_reference_name);
return 0;
}
@@ -105,9 +90,10 @@ acm_dump_policy_reference(u8 *buf, u32 b
return -EINVAL;
memset(buf, 0, ret);
- pr_buf->len = htonl(strlen(acm_bin_pol.policy_reference_name) + 1); /*
including stringend '\0' */
- strcpy((char *)(buf + sizeof(struct acm_policy_reference_buffer)),
- acm_bin_pol.policy_reference_name);
+ pr_buf->len = cpu_to_be32(strlen(acm_bin_pol.policy_reference_name) + 1);
/* including stringend '\0' */
+ strlcpy((char *)(buf + sizeof(struct acm_policy_reference_buffer)),
+ acm_bin_pol.policy_reference_name,
+ be32_to_cpu(pr_buf->len));
return ret;
}
@@ -198,7 +184,7 @@ acm_is_policy(char *buf, unsigned long l
return 0;
pol = (struct acm_policy_buffer *)buf;
- return ntohl(pol->magic) == ACM_MAGIC;
+ return be32_to_cpu(pol->magic) == ACM_MAGIC;
}
@@ -213,7 +199,7 @@ acm_setup(char *policy_start,
return rc;
pol = (struct acm_policy_buffer *)policy_start;
- if (ntohl(pol->magic) != ACM_MAGIC)
+ if (be32_to_cpu(pol->magic) != ACM_MAGIC)
return rc;
rc = do_acm_set_policy((void *)policy_start, (u32)policy_len);
@@ -236,8 +222,6 @@ acm_init(char *policy_start,
unsigned long policy_len)
{
int ret = ACM_OK;
-
- acm_set_endian();
/* first try to load the boot policy (uses its own locks) */
acm_setup(policy_start, policy_len);
diff -r 99d36a153024 -r 21d6135f522f xen/acm/acm_policy.c
--- a/xen/acm/acm_policy.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/acm/acm_policy.c Mon Jan 29 16:50:22 2007 +0000
@@ -63,9 +63,9 @@ do_acm_set_policy(void *buf, u32 buf_siz
{
struct acm_policy_buffer *pol = (struct acm_policy_buffer *)buf;
/* some sanity checking */
- if ((ntohl(pol->magic) != ACM_MAGIC) ||
- (buf_size != ntohl(pol->len)) ||
- (ntohl(pol->policy_version) != ACM_POLICY_VERSION))
+ if ((be32_to_cpu(pol->magic) != ACM_MAGIC) ||
+ (buf_size != be32_to_cpu(pol->len)) ||
+ (be32_to_cpu(pol->policy_version) != ACM_POLICY_VERSION))
{
printk("%s: ERROR in Magic, Version, or buf size.\n", __func__);
goto error_free;
@@ -73,8 +73,8 @@ do_acm_set_policy(void *buf, u32 buf_siz
if (acm_active_security_policy == ACM_POLICY_UNDEFINED) {
/* setup the policy with the boot policy */
- if (acm_init_binary_policy((ntohl(pol->secondary_policy_code) << 4) |
- ntohl(pol->primary_policy_code))) {
+ if (acm_init_binary_policy((be32_to_cpu(pol->secondary_policy_code) <<
4) |
+ be32_to_cpu(pol->primary_policy_code))) {
goto error_free;
}
acm_active_security_policy =
@@ -82,8 +82,8 @@ do_acm_set_policy(void *buf, u32 buf_siz
}
/* once acm_active_security_policy is set, it cannot be changed */
- if ((ntohl(pol->primary_policy_code) != acm_bin_pol.primary_policy_code) ||
- (ntohl(pol->secondary_policy_code) !=
acm_bin_pol.secondary_policy_code))
+ if ((be32_to_cpu(pol->primary_policy_code) !=
acm_bin_pol.primary_policy_code) ||
+ (be32_to_cpu(pol->secondary_policy_code) !=
acm_bin_pol.secondary_policy_code))
{
printkd("%s: Wrong policy type in boot policy!\n", __func__);
goto error_free;
@@ -93,21 +93,21 @@ do_acm_set_policy(void *buf, u32 buf_siz
write_lock(&acm_bin_pol_rwlock);
/* set label reference name */
- if (acm_set_policy_reference(buf + ntohl(pol->policy_reference_offset),
- ntohl(pol->primary_buffer_offset) -
- ntohl(pol->policy_reference_offset)))
+ if (acm_set_policy_reference(buf +
be32_to_cpu(pol->policy_reference_offset),
+ be32_to_cpu(pol->primary_buffer_offset) -
+ be32_to_cpu(pol->policy_reference_offset)))
goto error_lock_free;
/* set primary policy data */
- if (acm_primary_ops->set_binary_policy(buf +
ntohl(pol->primary_buffer_offset),
- ntohl(pol->secondary_buffer_offset)
-
- ntohl(pol->primary_buffer_offset)))
+ if (acm_primary_ops->set_binary_policy(buf +
be32_to_cpu(pol->primary_buffer_offset),
+
be32_to_cpu(pol->secondary_buffer_offset) -
+
be32_to_cpu(pol->primary_buffer_offset)))
goto error_lock_free;
/* set secondary policy data */
- if (acm_secondary_ops->set_binary_policy(buf +
ntohl(pol->secondary_buffer_offset),
- ntohl(pol->len) -
-
ntohl(pol->secondary_buffer_offset)))
+ if (acm_secondary_ops->set_binary_policy(buf +
be32_to_cpu(pol->secondary_buffer_offset),
+ be32_to_cpu(pol->len) -
+
be32_to_cpu(pol->secondary_buffer_offset)))
goto error_lock_free;
write_unlock(&acm_bin_pol_rwlock);
@@ -136,38 +136,38 @@ acm_get_policy(XEN_GUEST_HANDLE(void) bu
read_lock(&acm_bin_pol_rwlock);
bin_pol = (struct acm_policy_buffer *)policy_buffer;
- bin_pol->magic = htonl(ACM_MAGIC);
- bin_pol->primary_policy_code = htonl(acm_bin_pol.primary_policy_code);
- bin_pol->secondary_policy_code = htonl(acm_bin_pol.secondary_policy_code);
-
- bin_pol->len = htonl(sizeof(struct acm_policy_buffer));
- bin_pol->policy_reference_offset = htonl(ntohl(bin_pol->len));
- bin_pol->primary_buffer_offset = htonl(ntohl(bin_pol->len));
- bin_pol->secondary_buffer_offset = htonl(ntohl(bin_pol->len));
+ bin_pol->magic = cpu_to_be32(ACM_MAGIC);
+ bin_pol->primary_policy_code =
cpu_to_be32(acm_bin_pol.primary_policy_code);
+ bin_pol->secondary_policy_code =
cpu_to_be32(acm_bin_pol.secondary_policy_code);
+
+ bin_pol->len = cpu_to_be32(sizeof(struct acm_policy_buffer));
+ bin_pol->policy_reference_offset = cpu_to_be32(be32_to_cpu(bin_pol->len));
+ bin_pol->primary_buffer_offset = cpu_to_be32(be32_to_cpu(bin_pol->len));
+ bin_pol->secondary_buffer_offset = cpu_to_be32(be32_to_cpu(bin_pol->len));
- ret = acm_dump_policy_reference(policy_buffer +
ntohl(bin_pol->policy_reference_offset),
- buf_size -
ntohl(bin_pol->policy_reference_offset));
- if (ret < 0)
- goto error_free_unlock;
-
- bin_pol->len = htonl(ntohl(bin_pol->len) + ret);
- bin_pol->primary_buffer_offset = htonl(ntohl(bin_pol->len));
-
- ret = acm_primary_ops->dump_binary_policy (policy_buffer +
ntohl(bin_pol->primary_buffer_offset),
- buf_size -
ntohl(bin_pol->primary_buffer_offset));
- if (ret < 0)
- goto error_free_unlock;
-
- bin_pol->len = htonl(ntohl(bin_pol->len) + ret);
- bin_pol->secondary_buffer_offset = htonl(ntohl(bin_pol->len));
-
- ret = acm_secondary_ops->dump_binary_policy(policy_buffer +
ntohl(bin_pol->secondary_buffer_offset),
- buf_size -
ntohl(bin_pol->secondary_buffer_offset));
- if (ret < 0)
- goto error_free_unlock;
-
- bin_pol->len = htonl(ntohl(bin_pol->len) + ret);
- if (copy_to_guest(buf, policy_buffer, ntohl(bin_pol->len)))
+ ret = acm_dump_policy_reference(policy_buffer +
be32_to_cpu(bin_pol->policy_reference_offset),
+ buf_size -
be32_to_cpu(bin_pol->policy_reference_offset));
+ if (ret < 0)
+ goto error_free_unlock;
+
+ bin_pol->len = cpu_to_be32(be32_to_cpu(bin_pol->len) + ret);
+ bin_pol->primary_buffer_offset = cpu_to_be32(be32_to_cpu(bin_pol->len));
+
+ ret = acm_primary_ops->dump_binary_policy (policy_buffer +
be32_to_cpu(bin_pol->primary_buffer_offset),
+ buf_size -
be32_to_cpu(bin_pol->primary_buffer_offset));
+ if (ret < 0)
+ goto error_free_unlock;
+
+ bin_pol->len = cpu_to_be32(be32_to_cpu(bin_pol->len) + ret);
+ bin_pol->secondary_buffer_offset = cpu_to_be32(be32_to_cpu(bin_pol->len));
+
+ ret = acm_secondary_ops->dump_binary_policy(policy_buffer +
be32_to_cpu(bin_pol->secondary_buffer_offset),
+ buf_size -
be32_to_cpu(bin_pol->secondary_buffer_offset));
+ if (ret < 0)
+ goto error_free_unlock;
+
+ bin_pol->len = cpu_to_be32(be32_to_cpu(bin_pol->len) + ret);
+ if (copy_to_guest(buf, policy_buffer, be32_to_cpu(bin_pol->len)))
goto error_free_unlock;
read_unlock(&acm_bin_pol_rwlock);
@@ -204,12 +204,12 @@ acm_dump_statistics(XEN_GUEST_HANDLE(voi
if (len2 < 0)
goto error_lock_free;
- acm_stats.magic = htonl(ACM_MAGIC);
- acm_stats.primary_policy_code = htonl(acm_bin_pol.primary_policy_code);
- acm_stats.secondary_policy_code = htonl(acm_bin_pol.secondary_policy_code);
- acm_stats.primary_stats_offset = htonl(sizeof(struct acm_stats_buffer));
- acm_stats.secondary_stats_offset = htonl(sizeof(struct acm_stats_buffer) +
len1);
- acm_stats.len = htonl(sizeof(struct acm_stats_buffer) + len1 + len2);
+ acm_stats.magic = cpu_to_be32(ACM_MAGIC);
+ acm_stats.primary_policy_code =
cpu_to_be32(acm_bin_pol.primary_policy_code);
+ acm_stats.secondary_policy_code =
cpu_to_be32(acm_bin_pol.secondary_policy_code);
+ acm_stats.primary_stats_offset = cpu_to_be32(sizeof(struct
acm_stats_buffer));
+ acm_stats.secondary_stats_offset = cpu_to_be32(sizeof(struct
acm_stats_buffer) + len1);
+ acm_stats.len = cpu_to_be32(sizeof(struct acm_stats_buffer) + len1 + len2);
memcpy(stats_buffer, &acm_stats, sizeof(struct acm_stats_buffer));
diff -r 99d36a153024 -r 21d6135f522f xen/acm/acm_simple_type_enforcement_hooks.c
--- a/xen/acm/acm_simple_type_enforcement_hooks.c Mon Jan 29 16:49:29
2007 +0000
+++ b/xen/acm/acm_simple_type_enforcement_hooks.c Mon Jan 29 16:50:22
2007 +0000
@@ -143,11 +143,11 @@ ste_dump_policy(u8 *buf, u32 buf_size) {
if (buf_size < sizeof(struct acm_ste_policy_buffer))
return -EINVAL;
- ste_buf->ste_max_types = htonl(ste_bin_pol.max_types);
- ste_buf->ste_max_ssidrefs = htonl(ste_bin_pol.max_ssidrefs);
- ste_buf->policy_code = htonl(ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY);
- ste_buf->ste_ssid_offset = htonl(sizeof(struct acm_ste_policy_buffer));
- ret = ntohl(ste_buf->ste_ssid_offset) +
+ ste_buf->ste_max_types = cpu_to_be32(ste_bin_pol.max_types);
+ ste_buf->ste_max_ssidrefs = cpu_to_be32(ste_bin_pol.max_ssidrefs);
+ ste_buf->policy_code = cpu_to_be32(ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY);
+ ste_buf->ste_ssid_offset = cpu_to_be32(sizeof(struct
acm_ste_policy_buffer));
+ ret = be32_to_cpu(ste_buf->ste_ssid_offset) +
sizeof(domaintype_t)*ste_bin_pol.max_ssidrefs*ste_bin_pol.max_types;
ret = (ret + 7) & ~7;
@@ -156,7 +156,7 @@ ste_dump_policy(u8 *buf, u32 buf_size) {
return -EINVAL;
/* now copy buffer over */
- arrcpy(buf + ntohl(ste_buf->ste_ssid_offset),
+ arrcpy(buf + be32_to_cpu(ste_buf->ste_ssid_offset),
ste_bin_pol.ssidrefs,
sizeof(domaintype_t),
ste_bin_pol.max_ssidrefs*ste_bin_pol.max_types);
@@ -287,11 +287,11 @@ ste_set_policy(u8 *buf, u32 buf_size)
return -EINVAL;
/* Convert endianess of policy */
- ste_buf->policy_code = ntohl(ste_buf->policy_code);
- ste_buf->policy_version = ntohl(ste_buf->policy_version);
- ste_buf->ste_max_types = ntohl(ste_buf->ste_max_types);
- ste_buf->ste_max_ssidrefs = ntohl(ste_buf->ste_max_ssidrefs);
- ste_buf->ste_ssid_offset = ntohl(ste_buf->ste_ssid_offset);
+ ste_buf->policy_code = be32_to_cpu(ste_buf->policy_code);
+ ste_buf->policy_version = be32_to_cpu(ste_buf->policy_version);
+ ste_buf->ste_max_types = be32_to_cpu(ste_buf->ste_max_types);
+ ste_buf->ste_max_ssidrefs = be32_to_cpu(ste_buf->ste_max_ssidrefs);
+ ste_buf->ste_ssid_offset = be32_to_cpu(ste_buf->ste_ssid_offset);
/* policy type and version checks */
if ((ste_buf->policy_code != ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY) ||
@@ -348,12 +348,12 @@ ste_dump_stats(u8 *buf, u16 buf_len)
struct acm_ste_stats_buffer stats;
/* now send the hook counts to user space */
- stats.ec_eval_count = htonl(atomic_read(&ste_bin_pol.ec_eval_count));
- stats.gt_eval_count = htonl(atomic_read(&ste_bin_pol.gt_eval_count));
- stats.ec_denied_count = htonl(atomic_read(&ste_bin_pol.ec_denied_count));
- stats.gt_denied_count = htonl(atomic_read(&ste_bin_pol.gt_denied_count));
- stats.ec_cachehit_count =
htonl(atomic_read(&ste_bin_pol.ec_cachehit_count));
- stats.gt_cachehit_count =
htonl(atomic_read(&ste_bin_pol.gt_cachehit_count));
+ stats.ec_eval_count = cpu_to_be32(atomic_read(&ste_bin_pol.ec_eval_count));
+ stats.gt_eval_count = cpu_to_be32(atomic_read(&ste_bin_pol.gt_eval_count));
+ stats.ec_denied_count =
cpu_to_be32(atomic_read(&ste_bin_pol.ec_denied_count));
+ stats.gt_denied_count =
cpu_to_be32(atomic_read(&ste_bin_pol.gt_denied_count));
+ stats.ec_cachehit_count =
cpu_to_be32(atomic_read(&ste_bin_pol.ec_cachehit_count));
+ stats.gt_cachehit_count =
cpu_to_be32(atomic_read(&ste_bin_pol.gt_cachehit_count));
if (buf_len < sizeof(struct acm_ste_stats_buffer))
return -ENOMEM;
diff -r 99d36a153024 -r 21d6135f522f xen/arch/ia64/linux-xen/setup.c
--- a/xen/arch/ia64/linux-xen/setup.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/ia64/linux-xen/setup.c Mon Jan 29 16:50:22 2007 +0000
@@ -424,8 +424,7 @@ setup_arch (char **cmdline_p)
else
len = strlen (mvec_name);
len = min(len, sizeof (str) - 1);
- strncpy (str, mvec_name, len);
- str[len] = '\0';
+ strlcpy (str, mvec_name, len);
mvec_name = str;
} else
mvec_name = acpi_get_sysname();
@@ -564,7 +563,7 @@ show_cpuinfo (struct seq_file *m, void *
*cp++ = sep;
sep = ',';
*cp++ = ' ';
- strcpy(cp, feature_bits[i].feature_name);
+ strlcpy(cp, feature_bits[i].feature_name,
sizeof(features));
cp += strlen(feature_bits[i].feature_name);
mask &= ~feature_bits[i].mask;
}
diff -r 99d36a153024 -r 21d6135f522f xen/arch/ia64/xen/dom_fw.c
--- a/xen/arch/ia64/xen/dom_fw.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/ia64/xen/dom_fw.c Mon Jan 29 16:50:22 2007 +0000
@@ -333,13 +333,13 @@ dom_fw_fake_acpi(struct domain *d, struc
memset(tables, 0, sizeof(struct fake_acpi_tables));
/* setup XSDT (64bit version of RSDT) */
- strncpy(xsdt->signature, XSDT_SIG, 4);
+ strlcpy(xsdt->signature, XSDT_SIG, sizeof(xsdt->signature));
/* XSDT points to both the FADT and the MADT, so add one entry */
xsdt->length = sizeof(struct xsdt_descriptor_rev2) + sizeof(u64);
xsdt->revision = 1;
- strcpy(xsdt->oem_id, "XEN");
- strcpy(xsdt->oem_table_id, "Xen/ia64");
- strcpy(xsdt->asl_compiler_id, "XEN");
+ strlcpy(xsdt->oem_id, "XEN", sizeof(xsdt->oem_id));
+ strlcpy(xsdt->oem_table_id, "Xen/ia64", sizeof(xsdt->oem_table_id));
+ strlcpy(xsdt->asl_compiler_id, "XEN", sizeof(xsdt->asl_compiler_id));
xsdt->asl_compiler_revision = (xen_major_version() << 16) |
xen_minor_version();
@@ -349,16 +349,16 @@ dom_fw_fake_acpi(struct domain *d, struc
xsdt->checksum = generate_acpi_checksum(xsdt, xsdt->length);
/* setup FADT */
- strncpy(fadt->signature, FADT_SIG, 4);
+ strlcpy(fadt->signature, FADT_SIG, sizeof(fadt->signature));
fadt->length = sizeof(struct fadt_descriptor_rev2);
fadt->revision = FADT2_REVISION_ID;
- strcpy(fadt->oem_id, "XEN");
- strcpy(fadt->oem_table_id, "Xen/ia64");
- strcpy(fadt->asl_compiler_id, "XEN");
+ strlcpy(fadt->oem_id, "XEN", sizeof(fadt->oem_id));
+ strlcpy(fadt->oem_table_id, "Xen/ia64", sizeof(fadt->oem_table_id));
+ strlcpy(fadt->asl_compiler_id, "XEN", sizeof(fadt->asl_compiler_id));
fadt->asl_compiler_revision = (xen_major_version() << 16) |
xen_minor_version();
- strncpy(facs->signature, FACS_SIG, 4);
+ strlcpy(facs->signature, FACS_SIG, sizeof(facs->signature));
facs->version = 1;
facs->length = sizeof(struct facs_descriptor_rev2);
@@ -386,8 +386,8 @@ dom_fw_fake_acpi(struct domain *d, struc
fadt->checksum = generate_acpi_checksum(fadt, fadt->length);
/* setup RSDP */
- strncpy(rsdp->signature, RSDP_SIG, 8);
- strcpy(rsdp->oem_id, "XEN");
+ strlcpy(rsdp->signature, RSDP_SIG, sizeof(rsdp->signature));
+ strlcpy(rsdp->oem_id, "XEN", sizeof(rsdp->oem_id));
rsdp->revision = 2; /* ACPI 2.0 includes XSDT */
rsdp->length = sizeof(struct acpi20_table_rsdp);
rsdp->xsdt_address = ACPI_TABLE_MPA(xsdt);
@@ -397,11 +397,11 @@ dom_fw_fake_acpi(struct domain *d, struc
rsdp->ext_checksum = generate_acpi_checksum(rsdp, rsdp->length);
/* setup DSDT with trivial namespace. */
- strncpy(dsdt->signature, DSDT_SIG, 4);
+ strlcpy(dsdt->signature, DSDT_SIG, sizeof(dsdt->signature));
dsdt->revision = 1;
- strcpy(dsdt->oem_id, "XEN");
- strcpy(dsdt->oem_table_id, "Xen/ia64");
- strcpy(dsdt->asl_compiler_id, "XEN");
+ strlcpy(dsdt->oem_id, "XEN", sizeof(dsdt->oem_id));
+ strlcpy(dsdt->oem_table_id, "Xen/ia64", sizeof(dsdt->oem_table_id));
+ strlcpy(dsdt->asl_compiler_id, "XEN", sizeof(dsdt->asl_compiler_id));
dsdt->asl_compiler_revision = (xen_major_version() << 16) |
xen_minor_version();
@@ -409,7 +409,7 @@ dom_fw_fake_acpi(struct domain *d, struc
tables->aml[0] = 0x10; /* Scope */
tables->aml[1] = 0x40; /* length/offset to next object (patched) */
tables->aml[2] = 0x00;
- strncpy((char *)&tables->aml[3], "_SB_", 4);
+ strlcpy((char *)&tables->aml[3], "_SB_", 5);
/* The processor object isn't absolutely necessary, revist for SMP */
aml_len = 7;
@@ -437,11 +437,14 @@ dom_fw_fake_acpi(struct domain *d, struc
dsdt->checksum = generate_acpi_checksum(dsdt, dsdt->length);
/* setup MADT */
- strncpy(madt->header.signature, APIC_SIG, 4);
+ strlcpy(madt->header.signature, APIC_SIG,
sizeof(madt->header.signature));
madt->header.revision = 2;
- strcpy(madt->header.oem_id, "XEN");
- strcpy(madt->header.oem_table_id, "Xen/ia64");
- strcpy(madt->header.asl_compiler_id, "XEN");
+ strlcpy(madt->header.oem_id, "XEN",
+ sizeof(madt->header.oem_id));
+ strlcpy(madt->header.oem_table_id, "Xen/ia64",
+ sizeof(madt->header.oem_table_id));
+ strlcpy(madt->header.asl_compiler_id, "XEN",
+ sizeof(madt->header.asl_compiler_id));
madt->header.asl_compiler_revision = (xen_major_version() << 16) |
xen_minor_version();
@@ -760,8 +763,10 @@ dom_fw_init(struct domain *d,
tables->sal_systab.sal_rev_major = 0;
tables->sal_systab.entry_count = 2;
- strcpy((char *)tables->sal_systab.oem_id, "Xen/ia64");
- strcpy((char *)tables->sal_systab.product_id, "Xen/ia64");
+ strlcpy((char *)tables->sal_systab.oem_id, "Xen/ia64",
+ sizeof(tables->sal_systab.oem_id));
+ strlcpy((char *)tables->sal_systab.product_id, "Xen/ia64",
+ sizeof(tables->sal_systab.product_id));
/* PAL entry point: */
tables->sal_ed.type = SAL_DESC_ENTRY_POINT;
diff -r 99d36a153024 -r 21d6135f522f xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/ia64/xen/domain.c Mon Jan 29 16:50:22 2007 +0000
@@ -1148,8 +1148,7 @@ int construct_dom0(struct domain *d,
dom_fw_setup(d, bp_mpa, max_pages * PAGE_SIZE);
/* Fill boot param. */
- strncpy((char *)si->cmd_line, dom0_command_line, sizeof(si->cmd_line));
- si->cmd_line[sizeof(si->cmd_line)-1] = 0;
+ strlcpy((char *)si->cmd_line, dom0_command_line, sizeof(si->cmd_line));
bp = (struct ia64_boot_param *)((unsigned char *)si +
sizeof(start_info_t));
diff -r 99d36a153024 -r 21d6135f522f xen/arch/ia64/xen/gdbstub.c
--- a/xen/arch/ia64/xen/gdbstub.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/ia64/xen/gdbstub.c Mon Jan 29 16:50:22 2007 +0000
@@ -639,7 +639,7 @@ kgdb_get_reg(int regnum, struct unw_fram
outbuffer[size*2] = 0;
}
else
- strcpy(outbuffer, "E0");
+ strlcpy(outbuffer, "E0", sizeof("E0"));
return;
#else
diff -r 99d36a153024 -r 21d6135f522f xen/arch/ia64/xen/oprofile/perfmon.c
--- a/xen/arch/ia64/xen/oprofile/perfmon.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/ia64/xen/oprofile/perfmon.c Mon Jan 29 16:50:22 2007 +0000
@@ -119,7 +119,7 @@ xenoprof_arch_init(int *num_events, int
xenoprof_arch_init(int *num_events, int *is_primary, char *cpu_type)
{
*num_events = 0;
- strncpy(cpu_type, get_cpu_type(), XENOPROF_CPU_TYPE_SIZE - 1);
+ strlcpy(cpu_type, get_cpu_type(), XENOPROF_CPU_TYPE_SIZE);
cpu_type[XENOPROF_CPU_TYPE_SIZE - 1] = '\0';
*is_primary = 0;
diff -r 99d36a153024 -r 21d6135f522f xen/arch/powerpc/domain_build.c
--- a/xen/arch/powerpc/domain_build.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/powerpc/domain_build.c Mon Jan 29 16:50:22 2007 +0000
@@ -290,7 +290,7 @@ int construct_dom0(struct domain *d,
memset(si->cmd_line, 0, sizeof(si->cmd_line));
if ( cmdline != NULL )
- strncpy((char *)si->cmd_line, cmdline, sizeof(si->cmd_line)-1);
+ strlcpy((char *)si->cmd_line, cmdline, sizeof(si->cmd_line));
v->arch.ctxt.msr = msr;
v->arch.ctxt.pc = pc;
diff -r 99d36a153024 -r 21d6135f522f xen/arch/powerpc/of-devtree.c
--- a/xen/arch/powerpc/of-devtree.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/powerpc/of-devtree.c Mon Jan 29 16:50:22 2007 +0000
@@ -358,8 +358,7 @@ static ofdn_t ofd_node_create(
n->on_io = 0;
n->on_pathlen = pathlen;
n->on_last = ofd_pathsplit_left(path, '/', pathlen);
- strncpy(n->on_path, path, pathlen);
- n->on_path[n->on_pathlen] = 0;
+ strlcpy(n->on_path, path, pathlen);
return pos;
}
diff -r 99d36a153024 -r 21d6135f522f xen/arch/powerpc/ofd_fixup.c
--- a/xen/arch/powerpc/ofd_fixup.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/powerpc/ofd_fixup.c Mon Jan 29 16:50:22 2007 +0000
@@ -267,7 +267,7 @@ static ofdn_t ofd_chosen_props(void *m,
&path[1], sizeof (path) - 1);
}
- strcpy(bootargs, cmdline);
+ strlcpy(bootargs, cmdline, sizeof(bootargs));
bsz = strlen(bootargs) + 1;
rm = sizeof (bootargs) - bsz;
diff -r 99d36a153024 -r 21d6135f522f xen/arch/x86/cpu/common.c
--- a/xen/arch/x86/cpu/common.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/x86/cpu/common.c Mon Jan 29 16:50:22 2007 +0000
@@ -30,9 +30,9 @@ static void default_init(struct cpuinfo_
if (c->cpuid_level == -1) {
/* No cpuid. It must be an ancient CPU */
if (c->x86 == 4)
- strcpy(c->x86_model_id, "486");
+ safe_strcpy(c->x86_model_id, "486");
else if (c->x86 == 3)
- strcpy(c->x86_model_id, "386");
+ safe_strcpy(c->x86_model_id, "386");
}
}
@@ -383,7 +383,7 @@ void __devinit identify_cpu(struct cpuin
char *p;
p = table_lookup_model(c);
if ( p )
- strcpy(c->x86_model_id, p);
+ safe_strcpy(c->x86_model_id, p);
else
/* Last resort... */
snprintf(c->x86_model_id, sizeof(c->x86_model_id),
diff -r 99d36a153024 -r 21d6135f522f xen/arch/x86/cpu/cyrix.c
--- a/xen/arch/x86/cpu/cyrix.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/x86/cpu/cyrix.c Mon Jan 29 16:50:22 2007 +0000
@@ -181,7 +181,6 @@ static void __init init_cyrix(struct cpu
static void __init init_cyrix(struct cpuinfo_x86 *c)
{
unsigned char dir0, dir0_msn, dir0_lsn, dir1 = 0;
- char *buf = c->x86_model_id;
const char *p = NULL;
/* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
@@ -302,8 +301,8 @@ static void __init init_cyrix(struct cpu
dir0_msn = 7;
break;
}
- strcpy(buf, Cx86_model[dir0_msn & 7]);
- if (p) strcat(buf, p);
+ safe_strcpy(c->x86_model_id, Cx86_model[dir0_msn & 7]);
+ if (p) safe_strcat(c->x86_model_id, p);
return;
}
@@ -339,7 +338,7 @@ static void cyrix_identify(struct cpuinf
if ( c->x86 == 4 && test_cyrix_52div() ) {
unsigned char dir0, dir1;
- strcpy(c->x86_vendor_id, "CyrixInstead");
+ safe_strcpy(c->x86_vendor_id, "CyrixInstead");
c->x86_vendor = X86_VENDOR_CYRIX;
/* Actually enable cpuid on the older cyrix */
diff -r 99d36a153024 -r 21d6135f522f xen/arch/x86/cpu/intel.c
--- a/xen/arch/x86/cpu/intel.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/x86/cpu/intel.c Mon Jan 29 16:50:22 2007 +0000
@@ -152,7 +152,7 @@ static void __devinit init_intel(struct
}
if ( p )
- strcpy(c->x86_model_id, p);
+ safe_strcpy(c->x86_model_id, p);
c->x86_max_cores = num_cpu_cores(c);
diff -r 99d36a153024 -r 21d6135f522f xen/arch/x86/dmi_scan.c
--- a/xen/arch/x86/dmi_scan.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/x86/dmi_scan.c Mon Jan 29 16:50:22 2007 +0000
@@ -159,7 +159,7 @@ static void __init dmi_save_ident(struct
return;
dmi_ident[slot] = alloc_bootmem(strlen(p)+1);
if(dmi_ident[slot])
- strcpy(dmi_ident[slot], p);
+ safe_strcpy(dmi_ident[slot], p);
else
printk(KERN_ERR "dmi_save_ident: out of memory.\n");
}
diff -r 99d36a153024 -r 21d6135f522f xen/arch/x86/domain_build.c
--- a/xen/arch/x86/domain_build.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/x86/domain_build.c Mon Jan 29 16:50:22 2007 +0000
@@ -871,7 +871,7 @@ int construct_dom0(struct domain *d,
memset(si->cmd_line, 0, sizeof(si->cmd_line));
if ( cmdline != NULL )
- strlcpy((char *)si->cmd_line, cmdline, sizeof(si->cmd_line));
+ safe_strcpy(si->cmd_line, cmdline);
if ( fill_console_start_info((void *)(si + 1)) )
{
diff -r 99d36a153024 -r 21d6135f522f xen/arch/x86/hvm/intercept.c
--- a/xen/arch/x86/hvm/intercept.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/x86/hvm/intercept.c Mon Jan 29 16:50:22 2007 +0000
@@ -173,7 +173,7 @@ int hvm_register_savevm(struct domain *d
return -1;
}
- strlcpy(se->idstr, idstr, HVM_SE_IDSTR_LEN);
+ safe_strcpy(se->idstr, idstr);
se->instance_id = instance_id;
se->version_id = version_id;
@@ -217,7 +217,7 @@ int hvm_save(struct domain *d, hvm_domai
for(se = d->arch.hvm_domain.first_se; se != NULL; se = se->next) {
/* ID string */
- len = strnlen(se->idstr, HVM_SE_IDSTR_LEN);
+ len = strnlen(se->idstr, sizeof(se->idstr));
hvm_put_8u(h, len);
hvm_put_buffer(h, se->idstr, len);
@@ -255,7 +255,7 @@ static HVMStateEntry *find_se(struct dom
HVMStateEntry *se;
for(se = d->arch.hvm_domain.first_se; se != NULL; se = se->next) {
- if (!strncmp(se->idstr, idstr, HVM_SE_IDSTR_LEN) &&
+ if (!strncmp(se->idstr, idstr, sizeof(se->idstr)) &&
instance_id == se->instance_id){
return se;
}
diff -r 99d36a153024 -r 21d6135f522f xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/arch/x86/setup.c Mon Jan 29 16:50:22 2007 +0000
@@ -111,7 +111,7 @@ static void parse_acpi_param(char *s)
static void parse_acpi_param(char *s)
{
/* Save the parameter so it can be propagated to domain0. */
- strlcpy(acpi_param, s, sizeof(acpi_param));
+ safe_strcpy(acpi_param, s);
/* Interpret the parameter for use within Xen. */
if ( !strcmp(s, "off") )
@@ -748,22 +748,22 @@ void __init __start_xen(multiboot_info_t
if ( (cmdline = strchr(cmdline, ' ')) != NULL )
{
while ( *cmdline == ' ' ) cmdline++;
- strcpy(dom0_cmdline, cmdline);
+ safe_strcpy(dom0_cmdline, cmdline);
+ }
+
+ /* Append any extra parameters. */
+ if ( skip_ioapic_setup && !strstr(dom0_cmdline, "noapic") )
+ safe_strcat(dom0_cmdline, " noapic");
+ if ( acpi_skip_timer_override &&
+ !strstr(dom0_cmdline, "acpi_skip_timer_override") )
+ safe_strcat(dom0_cmdline, " acpi_skip_timer_override");
+ if ( (strlen(acpi_param) != 0) && !strstr(dom0_cmdline, "acpi=") )
+ {
+ safe_strcat(dom0_cmdline, " acpi=");
+ safe_strcat(dom0_cmdline, acpi_param);
}
cmdline = dom0_cmdline;
-
- /* Append any extra parameters. */
- if ( skip_ioapic_setup && !strstr(cmdline, "noapic") )
- strcat(cmdline, " noapic");
- if ( acpi_skip_timer_override &&
- !strstr(cmdline, "acpi_skip_timer_override") )
- strcat(cmdline, " acpi_skip_timer_override");
- if ( (strlen(acpi_param) != 0) && !strstr(cmdline, "acpi=") )
- {
- strcat(cmdline, " acpi=");
- strcat(cmdline, acpi_param);
- }
}
if ( (initrdidx > 0) && (initrdidx < mbi->mods_count) )
diff -r 99d36a153024 -r 21d6135f522f xen/common/kexec.c
--- a/xen/common/kexec.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/common/kexec.c Mon Jan 29 16:50:22 2007 +0000
@@ -131,7 +131,7 @@ __initcall(register_crashdump_trigger);
static void setup_note(Elf_Note *n, const char *name, int type, int descsz)
{
- strcpy(ELFNOTE_NAME(n), name);
+ safe_strcpy(ELFNOTE_NAME(n), name);
n->namesz = strlen(name);
n->descsz = descsz;
n->type = type;
diff -r 99d36a153024 -r 21d6135f522f xen/common/keyhandler.c
--- a/xen/common/keyhandler.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/common/keyhandler.c Mon Jan 29 16:50:22 2007 +0000
@@ -67,8 +67,7 @@ void register_keyhandler(
ASSERT(key_table[key].u.handler == NULL);
key_table[key].u.handler = handler;
key_table[key].flags = 0;
- strlcpy(key_table[key].desc, desc, STR_MAX);
- key_table[key].desc[STR_MAX-1] = '\0';
+ safe_strcpy(key_table[key].desc, desc);
}
void register_irq_keyhandler(
@@ -77,7 +76,7 @@ void register_irq_keyhandler(
ASSERT(key_table[key].u.irq_handler == NULL);
key_table[key].u.irq_handler = handler;
key_table[key].flags = KEYHANDLER_IRQ_CALLBACK;
- strlcpy(key_table[key].desc, desc, STR_MAX);
+ safe_strcpy(key_table[key].desc, desc);
}
static void show_handlers(unsigned char key)
diff -r 99d36a153024 -r 21d6135f522f xen/common/libelf/libelf-dominfo.c
--- a/xen/common/libelf/libelf-dominfo.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/common/libelf/libelf-dominfo.c Mon Jan 29 16:50:22 2007 +0000
@@ -128,16 +128,16 @@ int elf_xen_parse_note(struct elf_binary
switch (type)
{
case XEN_ELFNOTE_LOADER:
- elf_strlcpy(parms->loader, str, sizeof(parms->loader));
+ safe_strcpy(parms->loader, str);
break;
case XEN_ELFNOTE_GUEST_OS:
- elf_strlcpy(parms->guest_os, str, sizeof(parms->guest_os));
+ safe_strcpy(parms->guest_os, str);
break;
case XEN_ELFNOTE_GUEST_VERSION:
- elf_strlcpy(parms->guest_ver, str, sizeof(parms->guest_ver));
+ safe_strcpy(parms->guest_ver, str);
break;
case XEN_ELFNOTE_XEN_VERSION:
- elf_strlcpy(parms->xen_ver, str, sizeof(parms->xen_ver));
+ safe_strcpy(parms->xen_ver, str);
break;
case XEN_ELFNOTE_PAE_MODE:
if (0 == strcmp(str, "yes"))
@@ -224,13 +224,13 @@ int elf_xen_parse_guest_info(struct elf_
/* strings */
if (0 == strcmp(name, "LOADER"))
- elf_strlcpy(parms->loader, value, sizeof(parms->loader));
+ safe_strcpy(parms->loader, value);
if (0 == strcmp(name, "GUEST_OS"))
- elf_strlcpy(parms->guest_os, value, sizeof(parms->guest_os));
+ safe_strcpy(parms->guest_os, value);
if (0 == strcmp(name, "GUEST_VER"))
- elf_strlcpy(parms->guest_ver, value, sizeof(parms->guest_ver));
+ safe_strcpy(parms->guest_ver, value);
if (0 == strcmp(name, "XEN_VER"))
- elf_strlcpy(parms->xen_ver, value, sizeof(parms->xen_ver));
+ safe_strcpy(parms->xen_ver, value);
if (0 == strcmp(name, "PAE"))
{
if (0 == strcmp(value, "yes[extended-cr3]"))
diff -r 99d36a153024 -r 21d6135f522f xen/common/libelf/libelf-private.h
--- a/xen/common/libelf/libelf-private.h Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/common/libelf/libelf-private.h Mon Jan 29 16:50:22 2007 +0000
@@ -20,8 +20,6 @@
#define bswap_16(x) swab16(x)
#define bswap_32(x) swab32(x)
#define bswap_64(x) swab64(x)
-
-#define elf_strlcpy(d,s,c) strlcpy(d,s,c)
#else /* !__XEN__ */
@@ -52,13 +50,10 @@
xc_set_error(XC_INVALID_KERNEL, fmt , ## args ); \
} while (0)
-/* SysV unices have no strlcpy/strlcat. */
-static inline size_t elf_strlcpy(char *dest, const char *src, size_t size)
-{
- strncpy(dest, src, size-1);
- dest[size-1] = '\0';
- return strlen(src);
-}
+#define safe_strcpy(d,s) \
+do { strncpy((d),(s),sizeof((d))-1); \
+ (d)[sizeof((d))-1] = '\0'; \
+} while (0)
#endif
diff -r 99d36a153024 -r 21d6135f522f xen/common/perfc.c
--- a/xen/common/perfc.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/common/perfc.c Mon Jan 29 16:50:22 2007 +0000
@@ -148,8 +148,7 @@ static int perfc_copy_info(XEN_GUEST_HAN
{
for ( i = 0; i < NR_PERFCTRS; i++ )
{
- strlcpy(perfc_d[i].name, perfc_info[i].name,
- sizeof(perfc_d[i].name));
+ safe_strcpy(perfc_d[i].name, perfc_info[i].name);
switch ( perfc_info[i].type )
{
diff -r 99d36a153024 -r 21d6135f522f xen/common/rangeset.c
--- a/xen/common/rangeset.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/common/rangeset.c Mon Jan 29 16:50:22 2007 +0000
@@ -283,7 +283,7 @@ struct rangeset *rangeset_new(
if ( name != NULL )
{
- strlcpy(r->name, name, sizeof(r->name));
+ safe_strcpy(r->name, name);
}
else
{
diff -r 99d36a153024 -r 21d6135f522f xen/common/string.c
--- a/xen/common/string.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/common/string.c Mon Jan 29 16:50:22 2007 +0000
@@ -41,44 +41,6 @@ int strnicmp(const char *s1, const char
}
#endif
-#ifndef __HAVE_ARCH_STRCPY
-/**
- * strcpy - Copy a %NUL terminated string
- * @dest: Where to copy the string to
- * @src: Where to copy the string from
- */
-char * strcpy(char * dest,const char *src)
-{
- char *tmp = dest;
-
- while ((*dest++ = *src++) != '\0')
- /* nothing */;
- return tmp;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRNCPY
-/**
- * strncpy - Copy a length-limited, %NUL-terminated string
- * @dest: Where to copy the string to
- * @src: Where to copy the string from
- * @count: The maximum number of bytes to copy
- *
- * Note that unlike userspace strncpy, this does not %NUL-pad the buffer.
- * However, the result is not %NUL-terminated if the source exceeds
- * @count bytes.
- */
-char * strncpy(char * dest,const char *src,size_t count)
-{
- char *tmp = dest;
-
- while (count-- && (*dest++ = *src++) != '\0')
- /* nothing */;
-
- return tmp;
-}
-#endif
-
#ifndef __HAVE_ARCH_STRLCPY
/**
* strlcpy - Copy a %NUL terminated string into a sized buffer
@@ -105,52 +67,33 @@ EXPORT_SYMBOL(strlcpy);
EXPORT_SYMBOL(strlcpy);
#endif
-#ifndef __HAVE_ARCH_STRCAT
-/**
- * strcat - Append one %NUL-terminated string to another
- * @dest: The string to be appended to
- * @src: The string to append to it
- */
-char * strcat(char * dest, const char * src)
-{
- char *tmp = dest;
-
- while (*dest)
- dest++;
- while ((*dest++ = *src++) != '\0')
- ;
-
- return tmp;
-}
-#endif
-
-#ifndef __HAVE_ARCH_STRNCAT
-/**
- * strncat - Append a length-limited, %NUL-terminated string to another
- * @dest: The string to be appended to
- * @src: The string to append to it
- * @count: The maximum numbers of bytes to copy
- *
- * Note that in contrast to strncpy, strncat ensures the result is
- * terminated.
- */
-char * strncat(char *dest, const char *src, size_t count)
-{
- char *tmp = dest;
-
- if (count) {
- while (*dest)
- dest++;
- while ((*dest++ = *src++)) {
- if (--count == 0) {
- *dest = '\0';
- break;
- }
- }
- }
-
- return tmp;
-}
+#ifndef __HAVE_ARCH_STRLCAT
+/**
+ * strlcat - Append a %NUL terminated string into a sized buffer
+ * @dest: Where to copy the string to
+ * @src: Where to copy the string from
+ * @size: size of destination buffer
+ *
+ * Compatible with *BSD: the result is always a valid
+ * NUL-terminated string that fits in the buffer (unless,
+ * of course, the buffer size is zero).
+ */
+size_t strlcat(char *dest, const char *src, size_t size)
+{
+ size_t slen = strlen(src);
+ size_t dlen = strnlen(dest, size);
+ char *p = dest + dlen;
+
+ while ((p - dest) < size)
+ if ((*p++ = *src++) == '\0')
+ break;
+
+ if (dlen < size)
+ *(p-1) = '\0';
+
+ return slen + dlen;
+}
+EXPORT_SYMBOL(strlcat);
#endif
#ifndef __HAVE_ARCH_STRCMP
diff -r 99d36a153024 -r 21d6135f522f xen/drivers/char/console.c
--- a/xen/drivers/char/console.c Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/drivers/char/console.c Mon Jan 29 16:50:22 2007 +0000
@@ -481,7 +481,7 @@ void printk(const char *fmt, ...)
void set_printk_prefix(const char *prefix)
{
- strcpy(printk_prefix, prefix);
+ safe_strcpy(printk_prefix, prefix);
}
void init_console(void)
@@ -771,7 +771,7 @@ void debugtrace_printk(const char *fmt,
ASSERT(debugtrace_buf[debugtrace_bytes - 1] == 0);
- sprintf(buf, "%u ", ++count);
+ snprintf(buf, sizeof(buf), "%u ", ++count);
va_start(args, fmt);
(void)vsnprintf(buf + strlen(buf), sizeof(buf), fmt, args);
diff -r 99d36a153024 -r 21d6135f522f xen/include/acm/acm_endian.h
--- a/xen/include/acm/acm_endian.h Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/include/acm/acm_endian.h Mon Jan 29 16:50:22 2007 +0000
@@ -22,57 +22,27 @@
#ifndef _ACM_ENDIAN_H
#define _ACM_ENDIAN_H
-/* don't use these functions in performance critical sections! */
-
-/* set during initialization by testing */
-extern u8 little_endian;
-
-static inline u32 ntohl(u32 x)
-{
- if (little_endian)
- return
- ( (((x) >> 24) & 0xff )|
- (((x) >> 8) & 0xff00 )|
- (((x) << 8) & 0xff0000 )|
- (((x) << 24) & 0xff000000) );
- else
- return x;
-}
-
-static inline u16 ntohs(u16 x)
-{
- if (little_endian)
- return
- ( (((x) >> 8) & 0xff )|
- (((x) << 8) & 0xff00 ) );
- else
- return x;
-}
-
-#define htonl(x) ntohl(x)
-#define htons(x) ntohs(x)
+#include <asm/byteorder.h>
static inline void arrcpy16(u16 *dest, const u16 *src, size_t n)
{
- unsigned int i = 0;
- while (i < n) {
- dest[i] = htons(src[i]);
- i++;
- }
+ unsigned int i;
+ for ( i = 0; i < n; i++ )
+ dest[i] = cpu_to_be16(src[i]);
}
static inline void arrcpy32(u32 *dest, const u32 *src, size_t n)
{
- unsigned int i = 0;
- while (i < n) {
- dest[i] = htonl(src[i]);
- i++;
- }
+ unsigned int i;
+ for ( i = 0; i < n; i++ )
+ dest[i] = cpu_to_be32(src[i]);
}
-static inline void arrcpy(void *dest, const void *src, unsigned int elsize,
size_t n)
+static inline void arrcpy(
+ void *dest, const void *src, unsigned int elsize, size_t n)
{
- switch (elsize) {
+ switch ( elsize )
+ {
case sizeof(u16):
arrcpy16((u16 *)dest, (u16 *)src, n);
break;
diff -r 99d36a153024 -r 21d6135f522f xen/include/xen/byteorder/big_endian.h
--- a/xen/include/xen/byteorder/big_endian.h Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/include/xen/byteorder/big_endian.h Mon Jan 29 16:50:22 2007 +0000
@@ -11,10 +11,6 @@
#include <xen/types.h>
#include <xen/byteorder/swab.h>
-#define __constant_htonl(x) ((__force __be32)(__u32)(x))
-#define __constant_ntohl(x) ((__force __u32)(__be32)(x))
-#define __constant_htons(x) ((__force __be16)(__u16)(x))
-#define __constant_ntohs(x) ((__force __u16)(__be16)(x))
#define __constant_cpu_to_le64(x) ((__force __le64)___constant_swab64((x)))
#define __constant_le64_to_cpu(x) ___constant_swab64((__force
__u64)(__le64)(x))
#define __constant_cpu_to_le32(x) ((__force __le32)___constant_swab32((x)))
diff -r 99d36a153024 -r 21d6135f522f xen/include/xen/byteorder/little_endian.h
--- a/xen/include/xen/byteorder/little_endian.h Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/include/xen/byteorder/little_endian.h Mon Jan 29 16:50:22 2007 +0000
@@ -11,10 +11,6 @@
#include <xen/types.h>
#include <xen/byteorder/swab.h>
-#define __constant_htonl(x) ((__force __be32)___constant_swab32((x)))
-#define __constant_ntohl(x) ___constant_swab32((__force __be32)(x))
-#define __constant_htons(x) ((__force __be16)___constant_swab16((x)))
-#define __constant_ntohs(x) ___constant_swab16((__force __be16)(x))
#define __constant_cpu_to_le64(x) ((__force __le64)(__u64)(x))
#define __constant_le64_to_cpu(x) ((__force __u64)(__le64)(x))
#define __constant_cpu_to_le32(x) ((__force __le32)(__u32)(x))
diff -r 99d36a153024 -r 21d6135f522f xen/include/xen/string.h
--- a/xen/include/xen/string.h Mon Jan 29 16:49:29 2007 +0000
+++ b/xen/include/xen/string.h Mon Jan 29 16:50:22 2007 +0000
@@ -19,20 +19,20 @@ extern __kernel_size_t strspn(const char
*/
#include <asm/string.h>
-#ifndef __HAVE_ARCH_STRCPY
-extern char * strcpy(char *,const char *);
-#endif
-#ifndef __HAVE_ARCH_STRNCPY
-extern char * strncpy(char *,const char *, __kernel_size_t);
-#endif
+/*
+ * These string functions are considered too dangerous for normal use.
+ * Use safe_strcpy(), safe_strcat(), strlcpy(), strlcat() as appropriate.
+ */
+#define strcpy __xen_has_no_strcpy__
+#define strcat __xen_has_no_strcat__
+#define strncpy __xen_has_no_strncpy__
+#define strncat __xen_has_no_strncat__
+
#ifndef __HAVE_ARCH_STRLCPY
extern size_t strlcpy(char *,const char *, __kernel_size_t);
#endif
-#ifndef __HAVE_ARCH_STRCAT
-extern char * strcat(char *, const char *);
-#endif
-#ifndef __HAVE_ARCH_STRNCAT
-extern char * strncat(char *, const char *, __kernel_size_t);
+#ifndef __HAVE_ARCH_STRLCAT
+extern size_t strlcat(char *,const char *, __kernel_size_t);
#endif
#ifndef __HAVE_ARCH_STRCMP
extern int strcmp(const char *,const char *);
@@ -82,9 +82,8 @@ extern void * memchr(const void *,int,__
}
#endif
-#define safe_strcpy(d,s) \
-do { strncpy((d),(s),sizeof((d))); \
- (d)[sizeof((d))-1] = '\0'; \
-} while (0)
+/* safe_xxx always NUL-terminates and returns !=0 if result is truncated. */
+#define safe_strcpy(d, s) (strlcpy(d, s, sizeof(d)) >= sizeof(d))
+#define safe_strcat(d, s) (strlcat(d, s, sizeof(d)) >= sizeof(d))
#endif /* _LINUX_STRING_H_ */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|