Bug 1176739

Summary: guest will disappear after use setmaxmem set a big mem that libvirt cannot parse
Product: Red Hat Enterprise Linux 7 Reporter: Luyao Huang <lhuang>
Component: libvirtAssignee: Ján Tomko <jtomko>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: medium    
Version: 7.1CC: dyuan, hliu, mzhan, rbalakri
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-1.2.16-1.el7 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-11-19 06:05:38 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Luyao Huang 2014-12-23 02:39:07 UTC
description of problem:
setmaxmem can set a big mem that libvirt cannot parse

Version-Release number of selected component (if applicable):
libvirt-1.2.8-10.el7.x86_64

How reproducible:
100%

Steps to Reproduce:

1.prepare a offline vm
# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     test4                           shut off


2.setmaxmem to a big value to it:

# virsh setmaxmem test4 10000000T


3.check the guest xml:
  <memory unit='KiB'>10737418240000000</memory>


4.restart libvirtd guest will disappear
# service libvirtd restart
Redirecting to /bin/systemctl restart  libvirtd.service

# virsh setmaxmem test4 10000000T
error: failed to get domain 'test4'
error: Domain not found: no domain with matching name 'test4'

Actual results:
this value is too large to parse for libvirt
      
Expected results:
cannot set a cannot parse mem via setmaxmem

Comment 1 Ján Tomko 2015-05-05 16:10:01 UTC
Upstream patch:
https://www.redhat.com/archives/libvir-list/2015-May/msg00113.html

Comment 2 Ján Tomko 2015-05-14 15:40:31 UTC
Now pushed upstream:
commit 3511c12244beb289dd44503739d65b0e823685cd
Author:     Ján Tomko <jtomko>
CommitDate: 2015-05-14 17:17:40 +0200

    reject out of range memory in SetMemory APIs
    
    The APIs take the memory value in KiB and we store it in KiB
    internally, but we cannot parse the whole ULONG_MAX range
    on 64-bit systems, because virDomainParseScaledValue
    needs to fit the value in bytes in an unsigned long long.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1176739

git describe: v1.2.15-84-g3511c12

Comment 4 Luyao Huang 2015-07-30 09:08:04 UTC
Verify this bug with libvirt-1.2.17-2.el7.x86_64:

1. prepare a inactive guest:

# virsh domstate test4
shut off

2.
#  virsh setmaxmem test4 10000000T
error: Unable to change MaxMemorySize
error: numerical overflow: input too large: 10737418240000000


3.
# virsh setmaxmem test4 --size 9007199254740991K
error: Unable to change MaxMemorySize
error: numerical overflow: input too large: 9007199254740991

4.
# virsh setmaxmem test4 --size 9007199254740990K

5. restart libvirtd guest still exist:

# service libvirtd restart
Redirecting to /bin/systemctl restart  libvirtd.service

# virsh domstate test4
shut off

Comment 6 errata-xmlrpc 2015-11-19 06:05:38 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2015-2202.html