An integer underflow vulnerability exists in the nextstate() function in gpsd/packet.c of gpsd versions prior to commit ffa1d6f40bca0b035fc7f5e563160ebb67199da7. When parsing a NAVCOM packet, the payload length is calculated using lexer->length = (size_t)c - 4 without checking if the input byte c is less than 4. This results in an unsigned integer underflow, setting lexer->length to a very large value (near SIZE_MAX). The parser then enters a loop attempting to consume this massive number of bytes, causing 100% CPU utilization and a Denial of Service (DoS) condition.
{
"binaries": [
{
"binary_version": "3.15-2build1",
"binary_name": "gpsd"
},
{
"binary_version": "3.15-2build1",
"binary_name": "gpsd-clients"
},
{
"binary_version": "3.15-2build1",
"binary_name": "libgps-dev"
},
{
"binary_version": "3.15-2build1",
"binary_name": "libgps22"
},
{
"binary_version": "3.15-2build1",
"binary_name": "libqgpsmm-dev"
},
{
"binary_version": "3.15-2build1",
"binary_name": "libqgpsmm22"
},
{
"binary_version": "3.15-2build1",
"binary_name": "python-gps"
}
]
}{
"binaries": [
{
"binary_version": "3.17-5",
"binary_name": "gpsd"
},
{
"binary_version": "3.17-5",
"binary_name": "gpsd-clients"
},
{
"binary_version": "3.17-5",
"binary_name": "libgps-dev"
},
{
"binary_version": "3.17-5",
"binary_name": "libgps23"
},
{
"binary_version": "3.17-5",
"binary_name": "libqgpsmm-dev"
},
{
"binary_version": "3.17-5",
"binary_name": "libqgpsmm23"
},
{
"binary_version": "3.17-5",
"binary_name": "python-gps"
}
]
}{
"binaries": [
{
"binary_version": "3.20-8ubuntu0.4",
"binary_name": "gpsd"
},
{
"binary_version": "3.20-8ubuntu0.4",
"binary_name": "gpsd-clients"
},
{
"binary_version": "3.20-8ubuntu0.4",
"binary_name": "libgps-dev"
},
{
"binary_version": "3.20-8ubuntu0.4",
"binary_name": "libgps26"
},
{
"binary_version": "3.20-8ubuntu0.4",
"binary_name": "libqgpsmm-dev"
},
{
"binary_version": "3.20-8ubuntu0.4",
"binary_name": "libqgpsmm26"
},
{
"binary_version": "3.20-8ubuntu0.4",
"binary_name": "python3-gps"
}
]
}{
"binaries": [
{
"binary_version": "3.22-4ubuntu2.1",
"binary_name": "gpsd"
},
{
"binary_version": "3.22-4ubuntu2.1",
"binary_name": "gpsd-clients"
},
{
"binary_version": "3.22-4ubuntu2.1",
"binary_name": "gpsd-tools"
},
{
"binary_version": "3.22-4ubuntu2.1",
"binary_name": "libgps-dev"
},
{
"binary_version": "3.22-4ubuntu2.1",
"binary_name": "libgps28"
},
{
"binary_version": "3.22-4ubuntu2.1",
"binary_name": "libqgpsmm-dev"
},
{
"binary_version": "3.22-4ubuntu2.1",
"binary_name": "libqgpsmm28"
},
{
"binary_version": "3.22-4ubuntu2.1",
"binary_name": "python3-gps"
}
],
"availability": "No subscription required"
}{
"binaries": [
{
"binary_version": "3.25-3ubuntu3.2",
"binary_name": "gpsd"
},
{
"binary_version": "3.25-3ubuntu3.2",
"binary_name": "gpsd-clients"
},
{
"binary_version": "3.25-3ubuntu3.2",
"binary_name": "gpsd-tools"
},
{
"binary_version": "3.25-3ubuntu3.2",
"binary_name": "libgps-dev"
},
{
"binary_version": "3.25-3ubuntu3.2",
"binary_name": "libgps30t64"
},
{
"binary_version": "3.25-3ubuntu3.2",
"binary_name": "libqgpsmm-dev"
},
{
"binary_version": "3.25-3ubuntu3.2",
"binary_name": "libqgpsmm30t64"
},
{
"binary_version": "3.25-3ubuntu3.2",
"binary_name": "python3-gps"
}
],
"availability": "No subscription required"
}{
"binaries": [
{
"binary_version": "3.25-5ubuntu1.25.10.1",
"binary_name": "gpsd"
},
{
"binary_version": "3.25-5ubuntu1.25.10.1",
"binary_name": "gpsd-clients"
},
{
"binary_version": "3.25-5ubuntu1.25.10.1",
"binary_name": "gpsd-tools"
},
{
"binary_version": "3.25-5ubuntu1.25.10.1",
"binary_name": "libgps-dev"
},
{
"binary_version": "3.25-5ubuntu1.25.10.1",
"binary_name": "libgps30t64"
},
{
"binary_version": "3.25-5ubuntu1.25.10.1",
"binary_name": "libqgpsmm-dev"
},
{
"binary_version": "3.25-5ubuntu1.25.10.1",
"binary_name": "libqgpsmm30t64"
},
{
"binary_version": "3.25-5ubuntu1.25.10.1",
"binary_name": "python3-gps"
}
],
"availability": "No subscription required"
}