1. 26 6月, 2020 1 次提交
  2. 03 1月, 2020 1 次提交
  3. 21 10月, 2019 1 次提交
  4. 15 10月, 2019 1 次提交
  5. 08 7月, 2019 1 次提交
    • D
      rpc: ensure thread safe initialization of SASL library · 7722606b
      Daniel P. Berrangé 提交于
      Neither the sasl_client_init or sasl_server_init methods are even
      remotely threadsafe. They do a bunch of one-time initialization and
      merely use a simple integer counter to avoid repeated work, not even
      using atomic increment/reads on the counter. This can easily race in a
      threaded program. Protect the calls using a virOnce initializer function
      which is guaranteed threadsafe at least from libvirt's POV.
      
      If the application using libvirt also uses another library that makes
      use of SASL then the race still exists. It is impossible to fix that
      fully except in SASL code itself.
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      7722606b
  6. 04 2月, 2019 1 次提交
  7. 18 4月, 2018 1 次提交
    • M
      virobject: Introduce VIR_CLASS_NEW() macro · 10f94828
      Michal Privoznik 提交于
      So far we are repeating the following lines over and over:
      
        if (!(virSomeObjectClass = virClassNew(virClassForObject(),
                                   "virSomeObject",
                                   sizeof(virSomeObject),
                                   virSomeObjectDispose)))
            return -1;
      
      While this works, it is impossible to do some checking. Firstly,
      the class name (the 2nd argument) doesn't match the name in the
      code in all cases (the 3rd argument). Secondly, the current style
      is needlessly verbose. This commit turns example into following:
      
        if (!(VIR_CLASS_NEW(virSomeObject,
                            virClassForObject)))
            return -1;
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
      10f94828
  8. 17 4月, 2018 1 次提交
  9. 19 4月, 2017 1 次提交
  10. 16 3月, 2017 1 次提交
  11. 25 3月, 2014 1 次提交
  12. 18 3月, 2014 1 次提交
  13. 26 11月, 2013 2 次提交
    • C
      Fix invalid read in virNetSASLSessionClientStep debug log · 986900a5
      Christophe Fergeau 提交于
      virNetSASLSessionClientStep logs the data that is going to be passed to
      sasl_client_step as input data. However, it tries to log it as a string,
      while there is no guarantee that this data is going to be nul-terminated.
      This leads to this valgrind log:
      
      ==20938== Invalid read of size 1
      ==20938==    at 0x8BDB08F: vfprintf (vfprintf.c:1635)
      ==20938==    by 0x8C06DF2: vasprintf (vasprintf.c:62)
      ==20938==    by 0x4CCEDF9: virVasprintfInternal (virstring.c:337)
      ==20938==    by 0x4CA9516: virLogVMessage (virlog.c:842)
      ==20938==    by 0x4CA939A: virLogMessage (virlog.c:778)
      ==20938==    by 0x4E21E0D: virNetSASLSessionClientStep (virnetsaslcontext.c:458)
      ==20938==    by 0x4DE47B8: remoteAuthSASL (remote_driver.c:4136)
      ==20938==    by 0x4DE33AE: remoteAuthenticate (remote_driver.c:3635)
      ==20938==    by 0x4DDBFAA: doRemoteOpen (remote_driver.c:832)
      ==20938==    by 0x4DDC8BA: remoteConnectOpen (remote_driver.c:1027)
      ==20938==    by 0x4D8595F: do_open (libvirt.c:1239)
      ==20938==    by 0x4D863F3: virConnectOpenAuth (libvirt.c:1481)
      ==20938==    by 0x12762B: vshReconnect (virsh.c:337)
      ==20938==    by 0x12C9B0: vshInit (virsh.c:2470)
      ==20938==    by 0x12E9A5: main (virsh.c:3338)
      ==20938==  Address 0xe329ccd is 0 bytes after a block of size 141 alloc'd
      ==20938==    at 0x4A081D4: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
      ==20938==    by 0x8CB91B4: xdr_array (xdr_array.c:94)
      ==20938==    by 0x4E039C2: xdr_remote_auth_sasl_start_ret (remote_protocol.c:3134)
      ==20938==    by 0x4E1F8AA: virNetMessageDecodePayload (virnetmessage.c:405)
      ==20938==    by 0x4E119F5: virNetClientProgramCall (virnetclientprogram.c:377)
      ==20938==    by 0x4DF8141: callFull (remote_driver.c:5794)
      ==20938==    by 0x4DF821A: call (remote_driver.c:5816)
      ==20938==    by 0x4DE46CF: remoteAuthSASL (remote_driver.c:4112)
      ==20938==    by 0x4DE33AE: remoteAuthenticate (remote_driver.c:3635)
      ==20938==    by 0x4DDBFAA: doRemoteOpen (remote_driver.c:832)
      ==20938==    by 0x4DDC8BA: remoteConnectOpen (remote_driver.c:1027)
      ==20938==    by 0x4D8595F: do_open (libvirt.c:1239)
      ==20938==    by 0x4D863F3: virConnectOpenAuth (libvirt.c:1481)
      ==20938==    by 0x12762B: vshReconnect (virsh.c:337)
      ==20938==    by 0x12C9B0: vshInit (virsh.c:2470)
      ==20938==    by 0x12E9A5: main (virsh.c:3338)
      986900a5
    • C
      Tie SASL callbacks lifecycle to virNetSessionSASLContext · 13fdc6d6
      Christophe Fergeau 提交于
      The array of sasl_callback_t callbacks which is passed to sasl_client_new()
      must be kept alive as long as the created sasl_conn_t object is alive as
      cyrus-sasl uses this structure internally for things like logging, so
      the memory used for callbacks must only be freed after sasl_dispose() has
      been called.
      
      During testing of successful SASL logins with
      virsh -c qemu+tls:///system list --all
      I've been getting invalid read reports from valgrind
      
      ==9237== Invalid read of size 8
      ==9237==    at 0x6E93B6F: _sasl_getcallback (common.c:1745)
      ==9237==    by 0x6E95430: _sasl_log (common.c:1850)
      ==9237==    by 0x16593D87: digestmd5_client_mech_dispose (digestmd5.c:4580)
      ==9237==    by 0x6E91653: client_dispose (client.c:332)
      ==9237==    by 0x6E9476A: sasl_dispose (common.c:851)
      ==9237==    by 0x4E225A1: virNetSASLSessionDispose (virnetsaslcontext.c:678)
      ==9237==    by 0x4CBC551: virObjectUnref (virobject.c:262)
      ==9237==    by 0x4E254D1: virNetSocketDispose (virnetsocket.c:1042)
      ==9237==    by 0x4CBC551: virObjectUnref (virobject.c:262)
      ==9237==    by 0x4E2701C: virNetSocketEventFree (virnetsocket.c:1794)
      ==9237==    by 0x4C965D3: virEventPollCleanupHandles (vireventpoll.c:583)
      ==9237==    by 0x4C96987: virEventPollRunOnce (vireventpoll.c:652)
      ==9237==    by 0x4C94730: virEventRunDefaultImpl (virevent.c:274)
      ==9237==    by 0x12C7BA: vshEventLoop (virsh.c:2407)
      ==9237==    by 0x4CD3D04: virThreadHelper (virthreadpthread.c:161)
      ==9237==    by 0x7DAEF32: start_thread (pthread_create.c:309)
      ==9237==    by 0x8C86EAC: clone (clone.S:111)
      ==9237==  Address 0xe2d61b0 is 0 bytes inside a block of size 168 free'd
      ==9237==    at 0x4A07577: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
      ==9237==    by 0x4C73827: virFree (viralloc.c:580)
      ==9237==    by 0x4DE4BC7: remoteAuthSASL (remote_driver.c:4219)
      ==9237==    by 0x4DE33D0: remoteAuthenticate (remote_driver.c:3639)
      ==9237==    by 0x4DDBFAA: doRemoteOpen (remote_driver.c:832)
      ==9237==    by 0x4DDC8DC: remoteConnectOpen (remote_driver.c:1031)
      ==9237==    by 0x4D8595F: do_open (libvirt.c:1239)
      ==9237==    by 0x4D863F3: virConnectOpenAuth (libvirt.c:1481)
      ==9237==    by 0x12762B: vshReconnect (virsh.c:337)
      ==9237==    by 0x12C9B0: vshInit (virsh.c:2470)
      ==9237==    by 0x12E9A5: main (virsh.c:3338)
      
      This commit changes virNetSASLSessionNewClient() to take ownership of the SASL
      callbacks. Then we can free them in virNetSASLSessionDispose() after the corresponding
      sasl_conn_t has been freed.
      13fdc6d6
  14. 23 5月, 2013 1 次提交
  15. 16 1月, 2013 2 次提交
  16. 21 12月, 2012 4 次提交
  17. 01 12月, 2012 1 次提交
  18. 02 11月, 2012 1 次提交
  19. 12 10月, 2012 1 次提交
  20. 21 9月, 2012 1 次提交
  21. 07 8月, 2012 1 次提交
  22. 27 7月, 2012 1 次提交
    • E
      maint: don't permit format strings without % · 768007ae
      Eric Blake 提交于
      Any time we have a string with no % passed through gettext, a
      translator can inject a % to cause a stack overread.  When there
      is nothing to format, it's easier to ask for a string that cannot
      be used as a formatter, by using a trivial "%s" format instead.
      
      In the past, we have used --disable-nls to catch some of the
      offenders, but that doesn't get run very often, and many more
      uses have crept in.  Syntax check to the rescue!
      
      The syntax check can catch uses such as
      virReportError(code,
                     _("split "
                       "string"));
      by using a sed script to fold context lines into one pattern
      space before checking for a string without %.
      
      This patch is just mechanical insertion of %s; there are probably
      several messages touched by this patch where we would be better
      off giving the user more information than a fixed string.
      
      * cfg.mk (sc_prohibit_diagnostic_without_format): New rule.
      * src/datatypes.c (virUnrefConnect, virGetDomain)
      (virUnrefDomain, virGetNetwork, virUnrefNetwork, virGetInterface)
      (virUnrefInterface, virGetStoragePool, virUnrefStoragePool)
      (virGetStorageVol, virUnrefStorageVol, virGetNodeDevice)
      (virGetSecret, virUnrefSecret, virGetNWFilter, virUnrefNWFilter)
      (virGetDomainSnapshot, virUnrefDomainSnapshot): Add %s wrapper.
      * src/lxc/lxc_driver.c (lxcDomainSetBlkioParameters)
      (lxcDomainGetBlkioParameters): Likewise.
      * src/conf/domain_conf.c (virSecurityDeviceLabelDefParseXML)
      (virDomainDiskDefParseXML, virDomainGraphicsDefParseXML):
      Likewise.
      * src/conf/network_conf.c (virNetworkDNSHostsDefParseXML)
      (virNetworkDefParseXML): Likewise.
      * src/conf/nwfilter_conf.c (virNWFilterIsValidChainName):
      Likewise.
      * src/conf/nwfilter_params.c (virNWFilterVarValueCreateSimple)
      (virNWFilterVarAccessParse): Likewise.
      * src/libvirt.c (virDomainSave, virDomainSaveFlags)
      (virDomainRestore, virDomainRestoreFlags)
      (virDomainSaveImageGetXMLDesc, virDomainSaveImageDefineXML)
      (virDomainCoreDump, virDomainGetXMLDesc)
      (virDomainMigrateVersion1, virDomainMigrateVersion2)
      (virDomainMigrateVersion3, virDomainMigrate, virDomainMigrate2)
      (virStreamSendAll, virStreamRecvAll)
      (virDomainSnapshotGetXMLDesc): Likewise.
      * src/nwfilter/nwfilter_dhcpsnoop.c (virNWFilterSnoopReqLeaseDel)
      (virNWFilterDHCPSnoopReq): Likewise.
      * src/openvz/openvz_driver.c (openvzUpdateDevice): Likewise.
      * src/openvz/openvz_util.c (openvzKBPerPages): Likewise.
      * src/qemu/qemu_cgroup.c (qemuSetupCgroup): Likewise.
      * src/qemu/qemu_command.c (qemuBuildHubDevStr, qemuBuildChrChardevStr)
      (qemuBuildCommandLine): Likewise.
      * src/qemu/qemu_driver.c (qemuDomainGetPercpuStats): Likewise.
      * src/qemu/qemu_hotplug.c (qemuDomainAttachNetDevice): Likewise.
      * src/rpc/virnetsaslcontext.c (virNetSASLSessionGetIdentity):
      Likewise.
      * src/rpc/virnetsocket.c (virNetSocketNewConnectUNIX)
      (virNetSocketSendFD, virNetSocketRecvFD): Likewise.
      * src/storage/storage_backend_disk.c
      (virStorageBackendDiskBuildPool): Likewise.
      * src/storage/storage_backend_fs.c
      (virStorageBackendFileSystemProbe)
      (virStorageBackendFileSystemBuild): Likewise.
      * src/storage/storage_backend_rbd.c
      (virStorageBackendRBDOpenRADOSConn): Likewise.
      * src/storage/storage_driver.c (storageVolumeResize): Likewise.
      * src/test/test_driver.c (testInterfaceChangeBegin)
      (testInterfaceChangeCommit, testInterfaceChangeRollback):
      Likewise.
      * src/vbox/vbox_tmpl.c (vboxListAllDomains): Likewise.
      * src/xenxs/xen_sxpr.c (xenFormatSxprDisk, xenFormatSxpr):
      Likewise.
      * src/xenxs/xen_xm.c (xenXMConfigGetUUID, xenFormatXMDisk)
      (xenFormatXM): Likewise.
      768007ae
  23. 23 7月, 2012 1 次提交
    • O
      Desert the FSF address in copyright · f9ce7dad
      Osier Yang 提交于
      Per the FSF address could be changed from time to time, and GNU
      recommends the following now: (http://www.gnu.org/licenses/gpl-howto.html)
      
        You should have received a copy of the GNU General Public License
        along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
      
      This patch removes the explicit FSF address, and uses above instead
      (of course, with inserting 'Lesser' before 'General').
      
      Except a bunch of files for security driver, all others are changed
      automatically, the copyright for securify files are not complete,
      that's why to do it manually:
      
        src/security/security_selinux.h
        src/security/security_driver.h
        src/security/security_selinux.c
        src/security/security_apparmor.h
        src/security/security_apparmor.c
        src/security/security_driver.c
      f9ce7dad
  24. 18 7月, 2012 1 次提交
  25. 30 3月, 2012 1 次提交
  26. 04 8月, 2011 1 次提交
    • G
      rpc:fix sasl session relocking intead of unlocking it · 8329c56e
      Guannan Ren 提交于
      When trying to use any SASL authentication for TCP sockets by
      setting auth_tls = "sasl" in libvirtd.conf on server side, the
      client will hang because of the sasl session relocking other than
      dropping the lock when exiting virNetSASLSessionExtKeySize()
      * src/rpc/virnetsaslcontext.c: virNetSASLSessionExtKeySize drop the
        lock on exit
      8329c56e
  27. 03 8月, 2011 1 次提交
    • E
      rpc: correctly process sasl whitelist globs · 94b5dae4
      Eric Blake 提交于
      Detected by Coverity.  We want to compare the result of fnmatch 'rv',
      not our pre-set return value 'ret'.
      
      * src/rpc/virnetsaslcontext.c (virNetSASLContextCheckIdentity):
      Check correct variable.
      94b5dae4
  28. 28 7月, 2011 1 次提交
    • E
      build: avoid type-punning compiler warning · b240f966
      Eric Blake 提交于
      On RHEL 5, with gcc 4.1.2:
      
      rpc/virnetsaslcontext.c: In function 'virNetSASLSessionUpdateBufSize':
      rpc/virnetsaslcontext.c:396: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
      
      * src/rpc/virnetsaslcontext.c (virNetSASLSessionUpdateBufSize):
      Use a union to work around gcc warning.
      b240f966
  29. 26 7月, 2011 1 次提交
    • D
      Add mutex protection to SASL and TLS modules · 5622830c
      Daniel P. Berrange 提交于
      The virNetSASLContext, virNetSASLSession, virNetTLSContext and
      virNetTLSSession classes previously relied in their owners
      (virNetClient / virNetServer / virNetServerClient) to provide
      locking protection for concurrent usage. When virNetSocket
      gained its own locking code, this invalidated the implicit
      safety the SASL/TLS modules relied on. Thus we need to give
      them all explicit locking of their own via new mutexes.
      
      * src/rpc/virnetsaslcontext.c, src/rpc/virnettlscontext.c: Add
        a mutex per object
      5622830c
  30. 24 6月, 2011 1 次提交
    • D
      Generic module for handling SASL authentication & encryption · bb1c9296
      Daniel P. Berrange 提交于
      This provides two modules for handling SASL
      
       * virNetSASLContext provides the process-wide state, currently
         just a whitelist of usernames on the server and a one time
         library init call
      
       * virNetTLSSession provides the per-connection state, ie the
         SASL session itself. This also include APIs for providing
         data encryption/decryption once the session is established
      
      * src/Makefile.am: Add to libvirt-net-rpc.la
      * src/rpc/virnetsaslcontext.c, src/rpc/virnetsaslcontext.h: Generic
        SASL handling code
      bb1c9296