1. 01 12月, 2012 9 次提交
    • D
      Introduce APIs for splitting/joining strings · 76c1fd33
      Daniel P. Berrange 提交于
      This introduces a few new APIs for dealing with strings.
      One to split a char * into a char **, another to join a
      char ** into a char *, and finally one to free a char **
      
      There is a simple test suite to validate the edge cases
      too. No more need to use the horrible strtok_r() API,
      or hand-written code for splitting strings.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      76c1fd33
    • D
      Add support for shutdown / reboot APIs in LXC driver · cbb106f8
      Daniel P. Berrange 提交于
      Add support for doing controlled shutdown / reboot in the LXC
      driver. The default behaviour is to try talking to /dev/initctl
      inside the container's virtual root (/proc/$INITPID/root). This
      works with sysvinit or systemd. If that file does not exist
      then send SIGTERM (for shutdown) or SIGHUP (for reboot). These
      signals are not any kind of particular standard for shutdown
      or reboot, just something apps can choose to handle. The new
      virDomainSendProcessSignal allows for sending custom signals.
      
      We might allow the choice of SIGTERM/HUP to be configured for
      LXC containers via the XML in the future.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      cbb106f8
    • D
      Move reboot/shutdown flags combination check into QEMU driver · dff4a753
      Daniel P. Berrange 提交于
      The fact that only the guest agent, or ACPI flag can be used
      when requesting reboot/shutdown is merely a limitation of the
      QEMU driver impl at this time. Thus it should not be in
      libvirt.c code
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      dff4a753
    • D
      Add APIs for talking to init via /dev/initctl · c4ef575c
      Daniel P. Berrange 提交于
      To be able todo controlled shutdown/reboot of containers an
      API to talk to init via /dev/initctl is required. Fortunately
      this is quite straightforward to implement, and is supported
      by both sysvinit and systemd. Upstart support for /dev/initctl
      is unclear.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      c4ef575c
    • D
      a21f5112
    • D
      Quote client identity in SASL whitelist log message · 07da0a6b
      Daniel P. Berrange 提交于
      When seeing a message
      
       virNetSASLContextCheckIdentity:146 : SASL client admin not allowed in whitelist
      
      it isn't immediately obvious that 'admin' is the identity
      being checked. Quote the string to make it more obvious
      07da0a6b
    • V
      qemu: Fix up the default machine type for QMP probing · 3c465728
      Viktor Mihajlovski 提交于
      The default machine type must be stored in the first element of
      the caps->machineTypes array. This was done for help output
      parsing but not for QMP probing.
      
      Added a helper function qemuSetDefaultMachine to apply the same
      fix up for both probing methods.
      
      Further, it was necessary to set caps->nmachineTypes after QMP
      probing.
      Signed-off-by: NViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
      3c465728
    • G
    • E
      qemu: don't attempt undefined QMP commands · 3d7f6649
      Eric Blake 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=872292
      
      Libvirt should not attempt to call a QMP command that has not been
      documented in qemu.git - if future qemu introduces a command by the
      same name but with subtly different semantics, then libvirt will be
      broken when trying to use that command.
      
      We also had some code that could never be reached - some of our
      commands have an alternate for new vs. old qemu HMP commands; but
      if we are new enough to support QMP, we only need a fallback to
      the new HMP counterpart, and don't need to try for a QMP counterpart
      for the old HMP version.
      
      See also this attempt to convert the three snapshot commands to QMP:
      https://lists.gnu.org/archive/html/qemu-devel/2012-07/msg01597.html
      although it looks like that will still not happen before qemu 1.3.
      That thread eventually decided that qemu would use the name
      'save-vm' rather than 'savevm', which mitigates the fact that
      libvirt's attempt to use a QMP 'savevm' would be broken, but we
      might not be as lucky on the other commands.
      
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONSetCPU)
      (qemuMonitorJSONAddDrive, qemuMonitorJSONDriveDel)
      (qemuMonitorJSONCreateSnapshot, qemuMonitorJSONLoadSnapshot)
      (qemuMonitorJSONDeleteSnapshot): Use only HMP fallback for now.
      (qemuMonitorJSONAddHostNetwork, qemuMonitorJSONRemoveHostNetwork)
      (qemuMonitorJSONAttachDrive, qemuMonitorJSONGetGuestDriveAddress):
      Delete; QMP implies QEMU_CAPS_DEVICE, which prefers AddNetdev,
      RemoveNetdev, and AddDrive anyways (qemu_hotplug.c has all callers).
      * src/qemu/qemu_monitor.c (qemuMonitorAddHostNetwork)
      (qemuMonitorRemoveHostNetwork, qemuMonitorAttachDrive): Reflect
      deleted commands.
      * src/qemu/qemu_monitor_json.h (qemuMonitorJSONAddHostNetwork)
      (qemuMonitorJSONRemoveHostNetwork, qemuMonitorJSONAttachDrive):
      Likewise.
      3d7f6649
  2. 30 11月, 2012 13 次提交
    • E
      storage: fix scsi detach regression with cgroup ACLs · ddd103d3
      Eric Blake 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=876828
      
      Commit 38c4a9cc introduced a regression in hot unplugging of disks
      from qemu, where cgroup device ACLs were no longer being revoked
      (thankfully not a security hole: cgroup ACLs only prevent open()
      of the disk; so reverting the ACL prevents future abuse but doesn't
      stop abuse from an fd that was already opened before the ACL change).
      
      Commit 1b2ebf95 overlooked that there were two spots affected.
      
      * src/qemu/qemu_hotplug.c (qemuDomainDetachDiskDevice):
      Transfer backing chain before deletion.
      * src/qemu/qemu_driver.c (qemuDomainDetachDeviceDiskLive): Fix
      spacing (partly to ensure a different-looking patch).
      ddd103d3
    • J
      nwfilter: report an error on OOM · 4f9af085
      Ján Tomko 提交于
      Also removed some unreachable code found by coverity:
      libvirt-0.10.2/src/nwfilter/nwfilter_driver.c:259: unreachable: This
      code cannot be reached: "nwfilterDriverUnlock(driver...".
      4f9af085
    • P
      qemu: Refactor error reporting in qemu driver configuration parser · 6c5c4b8d
      Peter Krempa 提交于
      This patch adds two labels and gets rid of a ton of duplicated code.
      This patch also fixes some error message and switches most of them to
      proper error reporting functions.
      6c5c4b8d
    • P
      qemu: Refactor config parameter retrieval · 7aba113c
      Peter Krempa 提交于
      This patch adds macros to help retrieve configuration values from qemu
      driver's configuration. Some configuration options are grouped
      together in the process.
      7aba113c
    • L
      network: use dnsmasq --bind-dynamic when available · 753ff83a
      Laine Stump 提交于
      This bug resolves CVE-2012-3411, which is described in the following
      bugzilla report:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=833033
      
      The following report is specifically for libvirt on Fedora:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=874702
      
      In short, a dnsmasq instance run with the intention of listening for
      DHCP/DNS requests only on a libvirt virtual network (which is
      constructed using a Linux host bridge) would also answer queries sent
      from outside the virtualization host.
      
      This patch takes advantage of a new dnsmasq option "--bind-dynamic",
      which will cause the listening socket to be setup such that it will
      only receive those requests that actually come in via the bridge
      interface. In order for this behavior to actually occur, not only must
      "--bind-interfaces" be replaced with "--bind-dynamic", but also all
      "--listen-address" options must be replaced with a single
      "--interface" option. Fully:
      
         --bind-interfaces --except-interface lo --listen-address x.x.x.x ...
      
      (with --listen-address possibly repeated) is replaced with:
      
         --bind-dynamic --interface virbrX
      
      Of course libvirt can't use this new option if the host's dnsmasq
      doesn't have it, but we still want libvirt to function (because the
      great majority of libvirt installations, which only have mode='nat'
      networks using RFC1918 private address ranges (e.g. 192.168.122.0/24),
      are immune to this vulnerability from anywhere beyond the local subnet
      of the host), so we use the new dnsmasqCaps API to check if dnsmasq
      supports the new option and, if not, we use the "old" option style
      instead. In order to assure that this permissiveness doesn't lead to a
      vulnerable system, we do check for non-private addresses in this case,
      and refuse to start the network if both a) we are using the old-style
      options, and b) the network has a publicly routable IP
      address. Hopefully this will provide the proper balance of not being
      disruptive to those not practically affected, and making sure that
      those who *are* affected get their dnsmasq upgraded.
      
      (--bind-dynamic was added to dnsmasq in upstream commit
      54dd393f3938fc0c19088fbd319b95e37d81a2b0, which was included in
      dnsmasq-2.63)
      753ff83a
    • L
      util: new virSocketAddrIsPrivate function · bf402e77
      Laine Stump 提交于
      This new function returns true if the given address is in the range of
      any "private" or "local" networks as defined in RFC1918 (IPv4) or
      RFC3484/RFC4193 (IPv6), otherwise they return false.
      
      These ranges are:
      
         192.168.0.0/16
         172.16.0.0/16
         10.0.0.0/24
         FC00::/7
         FEC0::/10
      bf402e77
    • L
      util: capabilities detection for dnsmasq · 719c2c76
      Laine Stump 提交于
      In order to optionally take advantage of new features in dnsmasq when
      the host's version of dnsmasq supports them, but still be able to run
      on hosts that don't support the new features, we need to be able to
      detect the version of dnsmasq running on the host, and possibly
      determine from the help output what options are in this dnsmasq.
      
      This patch implements a greatly simplified version of the capabilities
      code we already have for qemu. A dnsmasqCaps device can be created and
      populated either from running a program on disk, reading a file with
      the concatenated output of "dnsmasq --version; dnsmasq --help", or
      examining a buffer in memory that contains the concatenated output of
      those two commands. Simple functions to retrieve capabilities flags,
      the version number, and the path of the binary are also included.
      
      bridge_driver.c creates a single dnsmasqCaps object at driver startup,
      and disposes of it at driver shutdown. Any time it must be used, the
      dnsmasqCapsRefresh method is called - it checks the mtime of the
      binary, and re-runs the checks if the binary has changed.
      
      networkxml2argvtest.c creates 2 "artificial" dnsmasqCaps objects at
      startup - one "restricted" (doesn't support --bind-dynamic) and one
      "full" (does support --bind-dynamic). Some of the test cases use one
      and some the other, to make sure both code pathes are tested.
      719c2c76
    • J
      conf: fix uninitialized variable in virDomainListSnapshots · 892582f9
      Ján Tomko 提交于
      If allocation of names fails, list is uninitialized.
      892582f9
    • J
      rpc: don't destroy xdr before creating it in virNetMessageEncodeHeader · 6e1fc355
      Ján Tomko 提交于
      On OOM, xdr_destroy got called even though it wasn't created yet.
      
      Found by coverity:
      Error: UNINIT (CWE-457):
          libvirt-0.10.2/src/rpc/virnetmessage.c:214: var_decl: Declaring
          variable "xdr" without initializer.
          libvirt-0.10.2/src/rpc/virnetmessage.c:219: cond_true: Condition
          "virReallocN(&msg->buffer, 1UL /* sizeof (*msg->buffer) */,
          msg->bufferLength) < 0", taking true branch
          libvirt-0.10.2/src/rpc/virnetmessage.c:221: goto: Jumping to label
          "cleanup"
          libvirt-0.10.2/src/rpc/virnetmessage.c:257: label: Reached label
          "cleanup"
          libvirt-0.10.2/src/rpc/virnetmessage.c:258: uninit_use: Using
          uninitialized value "xdr.x_ops".
      6e1fc355
    • J
      util: fix virBitmap allocation in virProcessInfoGetAffinity · 7730257d
      Ján Tomko 提交于
      Found by coverity:
      Error: REVERSE_INULL (CWE-476):
          libvirt-0.10.2/src/util/processinfo.c:141: deref_ptr: Directly
          dereferencing pointer "map".
          libvirt-0.10.2/src/util/processinfo.c:142: check_after_deref:
          Null-checking "map" suggests that it may be null, but it has already
          been dereferenced on all paths leading to the check.
      7730257d
    • J
      conf: fix NULL check in virNetDevBandwidthParse · d5e88425
      Ján Tomko 提交于
      Found by coverity:
      Error: REVERSE_INULL (CWE-476):
          libvirt-0.10.2/src/conf/netdev_bandwidth_conf.c:99: deref_ptr:
          Directly dereferencing pointer "node".
          libvirt-0.10.2/src/conf/netdev_bandwidth_conf.c:107:
          check_after_deref: Null-checking "node" suggests that it may be
          null, but it has already been dereferenced on all paths leading to
          the check.
      d5e88425
    • D
      Turn some dual-state int parameters into booleans · f4ea67f5
      Daniel P. Berrange 提交于
      The virStateInitialize method and several cgroups methods were
      using an 'int privileged' parameter or similar for dual-state
      values. These are better represented with the bool type.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      f4ea67f5
    • D
      Introduce a 'stop' method to virDriverState · d442ee23
      Daniel P. Berrange 提交于
      To allow actions to be performed in libvirtd when the host
      shuts down, or user session exits, introduce a 'stop'
      method to virDriverState. This will do things like saving
      the VM state to a file.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      d442ee23
  3. 29 11月, 2012 18 次提交