No more error logs when a USB reader is removed
When a USB reader was removed you got error logs from the CCID driver. Something like:
00000000 [140295925790464] ccid_usb.c:871:WriteUSB() write failed (1/22): -4 LIBUSB_ERROR_NO_DEVICE 00000506 [140295934183168] ccid_usb.c:871:WriteUSB() write failed (1/22): -4 LIBUSB_ERROR_NO_DEVICE
Why?
The first error is because IFDHICCPresence()
sends the CCID
command PC_to_RDR_GetSlotStatus
to know if a card is present.
The second error is because IFDHCloseChannel()
sends the CCID
command PC_to_RDR_IccPowerOff
to power off the card.
But since the USB device has been removed these 2 CCID commands fails and logs the error.
Solution
I had to modify both pcsc-lite (the middleware) and libccid (the smart card reader driver) so they both cooperate to fix the problem.
Now when pcscd detects that a reader has been removed it uses
IFDHSetCapabilities()
with the new tag TAG_IFD_DEVICE_REMOVED
to indicate to
the driver that the reader has been removed and that there is no point in trying to
send commands to a no more connected reader.
Bug reports
The problem has been initially reported by a Fedora user at "Bug 2011128 - pcscd spam syslog when the laptop is undocked and the reader is connected through the dock".
Then Jakub Jelen from Red Hat forwarded the bug upstream (to me) at "Reader disconnects are noisy in journal/logs #110" so I am aware of the problem.
The problem was then fixed 5 days later in "Use TAG_IFD_DEVICE_REMOVED when the reader is removed" for pcsc-lite and "Avoid logging errors when a reader is removed" for libccid.
Report upstream
The important point here is that users must reports bugs to their distribution. And distributions must report the problems upstream. It works well (in general).
What does not work is if you know of a problem and the problem does not come to me. For example this bug "Memory leak in pcscd" has been reported to pfSense 3 months ago and no one from pfSense took the time to report the bug upstream (to me). They just discussed about how to remove/disable pcsc-lite from pfSense instead.
I don't have a pfSense account so I can't comment on their bug tracker. I can't create an account on the bug trackers of every project that use my software. That is not how it is supposed to work. Distributors should forward bugs to the upstream projects.
I don't know if the problem is because pfSense is a commercial product or if it is because it uses FreeBSD. (be careful, a troll may be hidden in the previous sentence).
Conclusion
Don't be shy, report bugs.
Don't be shy, forward bugs upstream.