Bug 1982609

Summary: Properly propagate errors from public sync APIs
Product: Red Hat Enterprise Linux 8 Reporter: Michal Privoznik <mprivozn>
Component: libiscsiAssignee: Paolo Bonzini <pbonzini>
Status: CLOSED WONTFIX QA Contact: Tingting Mao <timao>
Severity: low Docs Contact:
Priority: low    
Version: 8.2CC: coli, jdenemar, jgao, jinzhao, jsuchane, juzhang, kwolf, lcheng, lmen, meili, mprivozn, pbonzini, timao, virt-maint, xuzhang
Target Milestone: rcKeywords: Triaged, Upstream
Target Release: 8.6Flags: pm-rhel: mirror+
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: 1797879 Environment:
Last Closed: 2022-07-21 02:09:41 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:
Bug Depends On:    
Bug Blocks: 1797879    

Description Michal Privoznik 2021-07-15 09:37:12 UTC
+++ This bug was initially created as a clone of Bug #1797879 +++

Description of problem:
Libvirt uses synchronous APIs for iscsi-direct type of pool, most notably iscsi_connect_sync(), iscsi_login_sync() and iscsi_reportluns_sync() (and plus some others). But those APIs don't return a negative value as documented but iSCSI status (e.g. SCSI_STATUS_GOOD) which is a positive integer. Thus when there's an error the caller doesn't see it.

Version-Release number of selected component (if applicable):
libvirt-6.0.0-2.virtcov.el8.x86_64
qemu-kvm-4.2.0-8.module+el8.2.0+5607+dc756904.x86_64
libiscsi-1.18.0-8.module+el8.2.0+4793+b09dd2fb.x86_64

How reproducible:
100%

Steps to Reproduce:
1. I've noticed this in the original bug, I can prepare an reproducer if really needed.

Actual results:
iscsi_login_sync() and others return a positive integer on error.

Expected results:
iscsi_login_sync() and others return -1 on error.

Additional info:

This is fixed upstream by the following commit:

https://github.com/sahlberg/libiscsi/commit/b5210a1e31afb9f0adf369cde11c612f3365432e

Comment 5 Tingting Mao 2021-07-19 05:59:25 UTC
Thanks for Michal's help.

Reproduced this bug as below.

1. Install libiscsi-devel package.
#  yum install -y libiscsi-devel

2. Compile the codes.
# gcc $(pkg-config --cflags libiscsi) $(pkg-config --libs libiscsi) lsiscsi.c -o lsiscsi

3. Tested.
# ./lsiscsi iqn.2021-03.com.example:client 10.66.10.26:3260 iqn.2021-07.com.example:timaoxx
DEBUG createContext:49 : creating context
DEBUG createContext:72 : connecting
DEBUG createContext:79 : logging in
DEBUG createContext:86 : Login should have failed
DEBUG createContext:92 : logging out
ERROR createContext:94 : Failed to logout: Failed to start logout() Trying to logout while not logged in. : Operation now in progress

DEBUG createContext:98 : disconnecting
DEBUG createContext:103 : destroying context