trivial patches for 2014-04-18
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQEcBAABAgAGBQJTUMffAAoJEL7lnXSkw9fb5YQH/1SHIUFYl85Z/qIXQppcLQXm Og32R7N82Z+E/FSBCuYWXB2Xo9jih4Pfn49A5tMyoITYQkrhNpHx3iXbZ2Ggk8/S FmD5Uuc3lCfhfldDyfKtKGMli0CYsxXfBKupUTrImHEGeQ4WSU8fkzuQy6MP9W+m HCms7nVXBgNqJ6mWBHkSgcXWbiKCPcfCJ5AvFQYDWHV83OF43jPnttXzKw/0ZNtZ COLW9j5KdFHerQx02mFOT0Ne8TUgEEUgihaKm5fJqaSZ6+xAA7LuHnSdXrRCyMOQ m9lY6WTQjf4XlSc4C13cAXSGgxfLeh8//DUa72huRuVMNRD66TGizoqlrS2NKuM= =AXjD -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mjt/tags/trivial-patches-2014-04-18' into staging trivial patches for 2014-04-18 # gpg: Signature made Fri 18 Apr 2014 07:36:15 BST using RSA key ID A4C3D7DB # gpg: Good signature from "Michael Tokarev <mjt@tls.msk.ru>" # gpg: aka "Michael Tokarev <mjt@corpit.ru>" # gpg: aka "Michael Tokarev <mjt@debian.org>" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6EE1 95D1 886E 8FFB 810D 4324 457C E0A0 8044 65C5 # Subkey fingerprint: 6F67 E18E 7C91 C5B1 5514 66A7 BEE5 9D74 A4C3 D7DB * remotes/mjt/tags/trivial-patches-2014-04-18: Fix grammar in comment doc: grammify "allows to" configure: Remove redundant message for -Werror scripts: add sample model file for Coverity Scan xbzrle.c: Avoid undefined behaviour with signed arithmetic int128.h: Avoid undefined behaviours involving signed arithmetic hw/ide/ahci.c: Avoid shift left into sign bit net: Report error when device / hub combo is not found. configure: Fix indentation of help for --enable/disable-debug-info qga: trivial fix for unclear documentation of guest-set-time vl: Report accelerator not supported for target more nicely Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
4b8abfb78e
5
configure
vendored
5
configure
vendored
@ -1217,8 +1217,8 @@ Advanced options (experts only):
|
||||
--enable-modules enable modules support
|
||||
--enable-debug-tcg enable TCG debugging
|
||||
--disable-debug-tcg disable TCG debugging (default)
|
||||
--enable-debug-info enable debugging information (default)
|
||||
--disable-debug-info disable debugging information
|
||||
--enable-debug-info enable debugging information (default)
|
||||
--disable-debug-info disable debugging information
|
||||
--enable-debug enable common debug build options
|
||||
--enable-sparse enable sparse checker
|
||||
--disable-sparse disable sparse checker (default)
|
||||
@ -4095,7 +4095,6 @@ echo "sparse enabled $sparse"
|
||||
echo "strip binaries $strip_opt"
|
||||
echo "profiler $profiler"
|
||||
echo "static build $static"
|
||||
echo "-Werror enabled $werror"
|
||||
if test "$darwin" = "yes" ; then
|
||||
echo "Cocoa support $cocoa"
|
||||
fi
|
||||
|
@ -71,7 +71,7 @@ static void eeprom_write_data(SMBusDevice *dev, uint8_t cmd, uint8_t *buf, int l
|
||||
printf("eeprom_write_byte: addr=0x%02x cmd=0x%02x val=0x%02x\n",
|
||||
dev->i2c.address, cmd, buf[0]);
|
||||
#endif
|
||||
/* An page write operation is not a valid SMBus command.
|
||||
/* A page write operation is not a valid SMBus command.
|
||||
It is a block write without a length byte. Fortunately we
|
||||
get the full block anyway. */
|
||||
/* TODO: Should this set the current location? */
|
||||
|
@ -438,9 +438,9 @@ static void check_cmd(AHCIState *s, int port)
|
||||
|
||||
if ((pr->cmd & PORT_CMD_START) && pr->cmd_issue) {
|
||||
for (slot = 0; (slot < 32) && pr->cmd_issue; slot++) {
|
||||
if ((pr->cmd_issue & (1 << slot)) &&
|
||||
if ((pr->cmd_issue & (1U << slot)) &&
|
||||
!handle_cmd(s, port, slot)) {
|
||||
pr->cmd_issue &= ~(1 << slot);
|
||||
pr->cmd_issue &= ~(1U << slot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ static inline Int128 int128_rshift(Int128 a, int n)
|
||||
if (n >= 64) {
|
||||
return (Int128) { h, h >> 63 };
|
||||
} else {
|
||||
return (Int128) { (a.lo >> n) | (a.hi << (64 - n)), h };
|
||||
return (Int128) { (a.lo >> n) | ((uint64_t)a.hi << (64 - n)), h };
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ static inline Int128 int128_neg(Int128 a)
|
||||
|
||||
static inline Int128 int128_sub(Int128 a, Int128 b)
|
||||
{
|
||||
return (Int128){ a.lo - b.lo, a.hi - b.hi - (a.lo < b.lo) };
|
||||
return (Int128){ a.lo - b.lo, (uint64_t)a.hi - b.hi - (a.lo < b.lo) };
|
||||
}
|
||||
|
||||
static inline bool int128_nonneg(Int128 a)
|
||||
|
@ -952,10 +952,12 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
|
||||
|
||||
nc = net_hub_find_client_by_name(vlan_id, device);
|
||||
if (!nc) {
|
||||
error_report("Host network device '%s' on hub '%d' not found",
|
||||
device, vlan_id);
|
||||
return;
|
||||
}
|
||||
if (!net_host_check_device(nc->model)) {
|
||||
monitor_printf(mon, "invalid host network device %s\n", device);
|
||||
error_report("invalid host network device '%s'", device);
|
||||
return;
|
||||
}
|
||||
qemu_del_net_client(nc);
|
||||
|
@ -823,7 +823,7 @@ In this case, the block device must be exported using qemu-nbd:
|
||||
qemu-nbd --socket=/tmp/my_socket my_disk.qcow2
|
||||
@end example
|
||||
|
||||
The use of qemu-nbd allows to share a disk between several guests:
|
||||
The use of qemu-nbd allows sharing of a disk between several guests:
|
||||
@example
|
||||
qemu-nbd --socket=/tmp/my_socket --share=2 my_disk.qcow2
|
||||
@end example
|
||||
|
@ -444,7 +444,8 @@ This option defines the type of the media: disk or cdrom.
|
||||
@item cyls=@var{c},heads=@var{h},secs=@var{s}[,trans=@var{t}]
|
||||
These options have the same definition as they have in @option{-hdachs}.
|
||||
@item snapshot=@var{snapshot}
|
||||
@var{snapshot} is "on" or "off" and allows to enable snapshot for given drive (see @option{-snapshot}).
|
||||
@var{snapshot} is "on" or "off" and controls snapshot mode for the given drive
|
||||
(see @option{-snapshot}).
|
||||
@item cache=@var{cache}
|
||||
@var{cache} is "none", "writeback", "unsafe", "directsync" or "writethrough" and controls how the host cache is used to access block data.
|
||||
@item aio=@var{aio}
|
||||
@ -1242,7 +1243,7 @@ Disable adaptive encodings. Adaptive encodings are enabled by default.
|
||||
An adaptive encoding will try to detect frequently updated screen regions,
|
||||
and send updates in these regions using a lossy encoding (like JPEG).
|
||||
This can be really helpful to save bandwidth when playing videos. Disabling
|
||||
adaptive encodings allows to restore the original static behavior of encodings
|
||||
adaptive encodings restores the original static behavior of encodings
|
||||
like Tight.
|
||||
|
||||
@item share=[allow-exclusive|force-shared|ignore]
|
||||
@ -2805,7 +2806,7 @@ UTC or local time, respectively. @code{localtime} is required for correct date i
|
||||
MS-DOS or Windows. To start at a specific point in time, provide @var{date} in the
|
||||
format @code{2006-06-17T16:01:21} or @code{2006-06-17}. The default base is UTC.
|
||||
|
||||
By default the RTC is driven by the host system time. This allows to use the
|
||||
By default the RTC is driven by the host system time. This allows using of the
|
||||
RTC as accurate reference clock inside the guest, specifically if the host
|
||||
time is smoothly following an accurate external reference clock, e.g. via NTP.
|
||||
If you want to isolate the guest time from the host, you can set @option{clock}
|
||||
|
@ -171,7 +171,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
|
||||
/* Now, if user has passed a time to set and the system time is set, we
|
||||
* just need to synchronize the hardware clock. However, if no time was
|
||||
* passed, user is requesting the opposite: set the system time from the
|
||||
* hardware clock. */
|
||||
* hardware clock (RTC). */
|
||||
pid = fork();
|
||||
if (pid == 0) {
|
||||
setsid();
|
||||
|
@ -96,8 +96,8 @@
|
||||
##
|
||||
# @guest-get-time:
|
||||
#
|
||||
# Get the information about guest time relative to the Epoch
|
||||
# of 1970-01-01 in UTC.
|
||||
# Get the information about guest's System Time relative to
|
||||
# the Epoch of 1970-01-01 in UTC.
|
||||
#
|
||||
# Returns: Time in nanoseconds.
|
||||
#
|
||||
@ -117,11 +117,11 @@
|
||||
# gap was, NTP might not be able to resynchronize the
|
||||
# guest.
|
||||
#
|
||||
# This command tries to set guest time to the given value,
|
||||
# then sets the Hardware Clock to the current System Time.
|
||||
# This will make it easier for a guest to resynchronize
|
||||
# without waiting for NTP. If no @time is specified, then
|
||||
# the time to set is read from RTC.
|
||||
# This command tries to set guest's System Time to the
|
||||
# given value, then sets the Hardware Clock (RTC) to the
|
||||
# current System Time. This will make it easier for a guest
|
||||
# to resynchronize without waiting for NTP. If no @time is
|
||||
# specified, then the time to set is read from RTC.
|
||||
#
|
||||
# @time: #optional time of nanoseconds, relative to the Epoch
|
||||
# of 1970-01-01 in UTC.
|
||||
|
183
scripts/coverity-model.c
Normal file
183
scripts/coverity-model.c
Normal file
@ -0,0 +1,183 @@
|
||||
/* Coverity Scan model
|
||||
*
|
||||
* Copyright (C) 2014 Red Hat, Inc.
|
||||
*
|
||||
* Authors:
|
||||
* Markus Armbruster <armbru@redhat.com>
|
||||
* Paolo Bonzini <pbonzini@redhat.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or, at your
|
||||
* option, any later version. See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* This is the source code for our Coverity user model file. The
|
||||
* purpose of user models is to increase scanning accuracy by explaining
|
||||
* code Coverity can't see (out of tree libraries) or doesn't
|
||||
* sufficiently understand. Better accuracy means both fewer false
|
||||
* positives and more true defects. Memory leaks in particular.
|
||||
*
|
||||
* - A model file can't import any header files. Some built-in primitives are
|
||||
* available but not wchar_t, NULL etc.
|
||||
* - Modeling doesn't need full structs and typedefs. Rudimentary structs
|
||||
* and similar types are sufficient.
|
||||
* - An uninitialized local variable signifies that the variable could be
|
||||
* any value.
|
||||
*
|
||||
* The model file must be uploaded by an admin in the analysis settings of
|
||||
* http://scan.coverity.com/projects/378
|
||||
*/
|
||||
|
||||
#define NULL ((void *)0)
|
||||
|
||||
typedef unsigned char uint8_t;
|
||||
typedef char int8_t;
|
||||
typedef unsigned int uint32_t;
|
||||
typedef int int32_t;
|
||||
typedef long ssize_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
typedef long long int64_t;
|
||||
typedef _Bool bool;
|
||||
|
||||
/* exec.c */
|
||||
|
||||
typedef struct AddressSpace AddressSpace;
|
||||
typedef uint64_t hwaddr;
|
||||
|
||||
static void __write(uint8_t *buf, ssize_t len)
|
||||
{
|
||||
int first, last;
|
||||
__coverity_negative_sink__(len);
|
||||
if (len == 0) return;
|
||||
buf[0] = first;
|
||||
buf[len-1] = last;
|
||||
__coverity_writeall__(buf);
|
||||
}
|
||||
|
||||
static void __read(uint8_t *buf, ssize_t len)
|
||||
{
|
||||
__coverity_negative_sink__(len);
|
||||
if (len == 0) return;
|
||||
int first = buf[0];
|
||||
int last = buf[len-1];
|
||||
}
|
||||
|
||||
bool address_space_rw(AddressSpace *as, hwaddr addr, uint8_t *buf,
|
||||
int len, bool is_write)
|
||||
{
|
||||
bool result;
|
||||
|
||||
// TODO: investigate impact of treating reads as producing
|
||||
// tainted data, with __coverity_tainted_data_argument__(buf).
|
||||
if (is_write) __write(buf, len); else __read(buf, len);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Tainting */
|
||||
|
||||
typedef struct {} name2keysym_t;
|
||||
static int get_keysym(const name2keysym_t *table,
|
||||
const char *name)
|
||||
{
|
||||
int result;
|
||||
if (result > 0) {
|
||||
__coverity_tainted_string_sanitize_content__(name);
|
||||
return result;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* glib memory allocation functions.
|
||||
*
|
||||
* Note that we ignore the fact that g_malloc of 0 bytes returns NULL,
|
||||
* and g_realloc of 0 bytes frees the pointer.
|
||||
*
|
||||
* Modeling this would result in Coverity flagging a lot of memory
|
||||
* allocations as potentially returning NULL, and asking us to check
|
||||
* whether the result of the allocation is NULL or not. However, the
|
||||
* resulting pointer should never be dereferenced anyway, and in fact
|
||||
* it is not in the vast majority of cases.
|
||||
*
|
||||
* If a dereference did happen, this would suppress a defect report
|
||||
* for an actual null pointer dereference. But it's too unlikely to
|
||||
* be worth wading through the false positives, and with some luck
|
||||
* we'll get a buffer overflow reported anyway.
|
||||
*/
|
||||
|
||||
void *malloc(size_t);
|
||||
void *calloc(size_t, size_t);
|
||||
void *realloc(void *, size_t);
|
||||
void free(void *);
|
||||
|
||||
void *
|
||||
g_malloc(size_t n_bytes)
|
||||
{
|
||||
void *mem;
|
||||
__coverity_negative_sink__(n_bytes);
|
||||
mem = malloc(n_bytes == 0 ? 1 : n_bytes);
|
||||
if (!mem) __coverity_panic__();
|
||||
return mem;
|
||||
}
|
||||
|
||||
void *
|
||||
g_malloc0(size_t n_bytes)
|
||||
{
|
||||
void *mem;
|
||||
__coverity_negative_sink__(n_bytes);
|
||||
mem = calloc(1, n_bytes == 0 ? 1 : n_bytes);
|
||||
if (!mem) __coverity_panic__();
|
||||
return mem;
|
||||
}
|
||||
|
||||
void g_free(void *mem)
|
||||
{
|
||||
free(mem);
|
||||
}
|
||||
|
||||
void *g_realloc(void * mem, size_t n_bytes)
|
||||
{
|
||||
__coverity_negative_sink__(n_bytes);
|
||||
mem = realloc(mem, n_bytes == 0 ? 1 : n_bytes);
|
||||
if (!mem) __coverity_panic__();
|
||||
return mem;
|
||||
}
|
||||
|
||||
void *g_try_malloc(size_t n_bytes)
|
||||
{
|
||||
__coverity_negative_sink__(n_bytes);
|
||||
return malloc(n_bytes == 0 ? 1 : n_bytes);
|
||||
}
|
||||
|
||||
void *g_try_malloc0(size_t n_bytes)
|
||||
{
|
||||
__coverity_negative_sink__(n_bytes);
|
||||
return calloc(1, n_bytes == 0 ? 1 : n_bytes);
|
||||
}
|
||||
|
||||
void *g_try_realloc(void *mem, size_t n_bytes)
|
||||
{
|
||||
__coverity_negative_sink__(n_bytes);
|
||||
return realloc(mem, n_bytes == 0 ? 1 : n_bytes);
|
||||
}
|
||||
|
||||
/* Other glib functions */
|
||||
|
||||
typedef struct _GIOChannel GIOChannel;
|
||||
GIOChannel *g_io_channel_unix_new(int fd)
|
||||
{
|
||||
GIOChannel *c = g_malloc0(sizeof(GIOChannel));
|
||||
__coverity_escape__(fd);
|
||||
return c;
|
||||
}
|
||||
|
||||
void g_assertion_message_expr(const char *domain,
|
||||
const char *file,
|
||||
int line,
|
||||
const char *func,
|
||||
const char *expr)
|
||||
{
|
||||
__coverity_panic__();
|
||||
}
|
2
vl.c
2
vl.c
@ -2740,7 +2740,7 @@ static int configure_accelerator(QEMUMachine *machine)
|
||||
if (!accel_list[i].available()) {
|
||||
printf("%s not supported for this target\n",
|
||||
accel_list[i].name);
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
*(accel_list[i].allowed) = true;
|
||||
ret = accel_list[i].init(machine);
|
||||
|
8
xbzrle.c
8
xbzrle.c
@ -28,7 +28,7 @@ int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf, int slen,
|
||||
{
|
||||
uint32_t zrun_len = 0, nzrun_len = 0;
|
||||
int d = 0, i = 0;
|
||||
long res, xor;
|
||||
long res;
|
||||
uint8_t *nzrun_start = NULL;
|
||||
|
||||
g_assert(!(((uintptr_t)old_buf | (uintptr_t)new_buf | slen) %
|
||||
@ -93,9 +93,11 @@ int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf, int slen,
|
||||
/* word at a time for speed, use of 32-bit long okay */
|
||||
if (!res) {
|
||||
/* truncation to 32-bit long okay */
|
||||
long mask = (long)0x0101010101010101ULL;
|
||||
unsigned long mask = (unsigned long)0x0101010101010101ULL;
|
||||
while (i < slen) {
|
||||
xor = *(long *)(old_buf + i) ^ *(long *)(new_buf + i);
|
||||
unsigned long xor;
|
||||
xor = *(unsigned long *)(old_buf + i)
|
||||
^ *(unsigned long *)(new_buf + i);
|
||||
if ((xor - mask) & ~xor & (mask << 7)) {
|
||||
/* found the end of an nzrun within the current long */
|
||||
while (old_buf[i] != new_buf[i]) {
|
||||
|
Loading…
Reference in New Issue
Block a user