xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Ian Jackson <ian.jackson@eu.citrix.com>
To: xen-devel@lists.xensource.com
Cc: andrew.cooper3@citrix.com, mattjd@gmail.com,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	security@xen.org
Subject: [PATCH 14/21] libxc: Introduce xc_bitops.h
Date: Thu, 13 Jun 2013 19:21:50 +0100	[thread overview]
Message-ID: <1371147717-21343-15-git-send-email-ian.jackson@eu.citrix.com> (raw)
In-Reply-To: <1371147717-21343-1-git-send-email-ian.jackson@eu.citrix.com>

Copy the one file tools/libxc/xc_bitops.h from xen.git#aa1355f9.
We will need this for the next patch, which calls for a bitmap in
libxc.

xc_bitops.h was introduced to unify various existing sets of bitmap
operations.  In this patch we backport only the introduction, not the
replacement of the other instances.  So we introduce another instance
Sorry :-/.

This is part of the fix to a security issue, XSA-55.

This patch is unique to the Xen 4.1 version of the XSA-55 series.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
 tools/libxc/xc_bitops.h |   63 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 63 insertions(+), 0 deletions(-)
 create mode 100644 tools/libxc/xc_bitops.h

diff --git a/tools/libxc/xc_bitops.h b/tools/libxc/xc_bitops.h
new file mode 100644
index 0000000..d8e0c16
--- /dev/null
+++ b/tools/libxc/xc_bitops.h
@@ -0,0 +1,63 @@
+#ifndef XC_BITOPS_H
+#define XC_BITOPS_H 1
+
+/* bitmap operations for single threaded access */
+
+#include <stdlib.h>
+#include <string.h>
+
+#define BITS_PER_LONG (sizeof(unsigned long) * 8)
+#define ORDER_LONG (sizeof(unsigned long) == 4 ? 5 : 6)
+
+#define BITMAP_ENTRY(_nr,_bmap) ((_bmap))[(_nr)/BITS_PER_LONG]
+#define BITMAP_SHIFT(_nr) ((_nr) % BITS_PER_LONG)
+
+/* calculate required space for number of longs needed to hold nr_bits */
+static inline int bitmap_size(int nr_bits)
+{
+    int nr_long, nr_bytes;
+    nr_long = (nr_bits + BITS_PER_LONG - 1) >> ORDER_LONG;
+    nr_bytes = nr_long * sizeof(unsigned long);
+    return nr_bytes;
+}
+
+static inline unsigned long *bitmap_alloc(int nr_bits)
+{
+    return calloc(1, bitmap_size(nr_bits));
+}
+
+static inline void bitmap_clear(unsigned long *addr, int nr_bits)
+{
+    memset(addr, 0, bitmap_size(nr_bits));
+}
+
+static inline int test_bit(int nr, unsigned long *addr)
+{
+    return (BITMAP_ENTRY(nr, addr) >> BITMAP_SHIFT(nr)) & 1;
+}
+
+static inline void clear_bit(int nr, unsigned long *addr)
+{
+    BITMAP_ENTRY(nr, addr) &= ~(1UL << BITMAP_SHIFT(nr));
+}
+
+static inline void set_bit(int nr, unsigned long *addr)
+{
+    BITMAP_ENTRY(nr, addr) |= (1UL << BITMAP_SHIFT(nr));
+}
+
+static inline int test_and_clear_bit(int nr, unsigned long *addr)
+{
+    int oldbit = test_bit(nr, addr);
+    clear_bit(nr, addr);
+    return oldbit;
+}
+
+static inline int test_and_set_bit(int nr, unsigned long *addr)
+{
+    int oldbit = test_bit(nr, addr);
+    set_bit(nr, addr);
+    return oldbit;
+}
+
+#endif  /* XC_BITOPS_H */
-- 
1.7.2.5

  parent reply	other threads:[~2013-06-13 18:21 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-13 18:21 [PATCH v8 00/21] XSA55 libelf fixes for Xen 4.1 Ian Jackson
2013-06-13 18:21 ` [PATCH 01/21] libelf: abolish libelf-relocate.c Ian Jackson
2013-06-13 18:21 ` [PATCH 02/21] libxc: introduce xc_dom_seg_to_ptr_pages Ian Jackson
2013-06-13 18:21 ` [PATCH 03/21] libxc: Fix range checking in xc_dom_pfn_to_ptr etc Ian Jackson
2013-06-13 18:21 ` [PATCH 04/21] libelf: abolish elf_sval and elf_access_signed Ian Jackson
2013-06-13 18:21 ` [PATCH 05/21] libelf/xc_dom_load_elf_symtab: Do not use "syms" uninitialised Ian Jackson
2013-06-13 18:21 ` [PATCH 06/21] libelf: introduce macros for memory access and pointer handling Ian Jackson
2013-06-13 18:21 ` [PATCH 07/21] tools/xcutils/readnotes: adjust print_l1_mfn_valid_note Ian Jackson
2013-06-13 18:21 ` [PATCH 08/21] libelf: check nul-terminated strings properly Ian Jackson
2013-06-13 18:21 ` [PATCH 09/21] libelf: check all pointer accesses Ian Jackson
2013-06-13 18:21 ` [PATCH 10/21] libelf: Check pointer references in elf_is_elfbinary Ian Jackson
2013-06-13 18:21 ` [PATCH 11/21] libelf: Make all callers call elf_check_broken Ian Jackson
2013-06-13 18:21 ` [PATCH 12/21] libelf: use C99 bool for booleans Ian Jackson
2013-06-13 18:21 ` [PATCH 13/21] libelf: use only unsigned integers Ian Jackson
2013-06-13 18:21 ` Ian Jackson [this message]
2013-06-13 18:21 ` [PATCH 15/21] libelf: check loops for running away Ian Jackson
2013-06-13 18:21 ` [PATCH 16/21] libelf: abolish obsolete macros Ian Jackson
2013-06-13 18:21 ` [PATCH 17/21] libxc: Add range checking to xc_dom_binloader Ian Jackson
2013-06-13 18:21 ` [PATCH 18/21] libxc: check failure of xc_dom_*_to_ptr, xc_map_foreign_range Ian Jackson
2013-06-13 18:21 ` [PATCH 19/21] libxc: check return values from malloc Ian Jackson
2013-06-13 18:21 ` [PATCH 20/21] libxc: range checks in xc_dom_p2m_host and _guest Ian Jackson
2013-06-13 18:21 ` [PATCH 21/21] libxc: check blob size before proceeding in xc_dom_check_gzip Ian Jackson
  -- strict thread matches above, loose matches on Subject: below --
2013-06-12 16:00 [PATCH RFC v7 00/22] XSA55 libelf fixes for Xen 4.1 Ian Jackson
2013-06-12 16:00 ` [PATCH 14/21] libxc: Introduce xc_bitops.h Ian Jackson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1371147717-21343-15-git-send-email-ian.jackson@eu.citrix.com \
    --to=ian.jackson@eu.citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=mattjd@gmail.com \
    --cc=security@xen.org \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).