diff --git a/.github/workflows/wheel-builder.yml b/.github/workflows/wheel-builder.yml
index eb3b5bca1c8544fce0b66f59a98de81422ba84f3_LmdpdGh1Yi93b3JrZmxvd3Mvd2hlZWwtYnVpbGRlci55bWw=..884f496fdfc6e9b2dbef1f665104ce975dc97c55_LmdpdGh1Yi93b3JrZmxvd3Mvd2hlZWwtYnVpbGRlci55bWw= 100644
--- a/.github/workflows/wheel-builder.yml
+++ b/.github/workflows/wheel-builder.yml
@@ -66,7 +66,7 @@
 
       - run: mkdir bcrypt-wheelhouse
       - run: mv wheelhouse/bcrypt*.whl bcrypt-wheelhouse/
-      - uses: actions/upload-artifact@v1
+      - uses: actions/upload-artifact@v3.1.0
         with:
           name: "bcrypt-${{ github.event.inputs.version }}-${{ matrix.MANYLINUX.NAME }} -${{ matrix.PYTHON.ABI_VERSION }}"
           path: bcrypt-wheelhouse/
@@ -115,7 +115,7 @@
 
       - run: mkdir bcrypt-wheelhouse
       - run: mv wheelhouse/bcrypt*.whl bcrypt-wheelhouse/
-      - uses: actions/upload-artifact@v1
+      - uses: actions/upload-artifact@v3.1.0
         with:
           name: "bcrypt-${{ github.event.inputs.version }}-macOS-${{ matrix.PYTHON.ABI_VERSION }}"
           path: bcrypt-wheelhouse/
@@ -159,7 +159,7 @@
       # TODO: can we setup another python and test in the same job? this would catch bad linking problems (e.g. build and test on py36, but then install py38 and see if it works
       - run: mkdir bcrypt-wheelhouse
       - run: move wheelhouse\bcrypt*.whl bcrypt-wheelhouse\
-      - uses: actions/upload-artifact@v1
+      - uses: actions/upload-artifact@v3.1.0
         with:
           name: "bcrypt-${{ github.event.inputs.version }}-${{ matrix.WINDOWS.ARCH }}-${{ matrix.PYTHON.ABI_VERSION }}"
           path: bcrypt-wheelhouse\
diff --git a/README.rst b/README.rst
index eb3b5bca1c8544fce0b66f59a98de81422ba84f3_UkVBRE1FLnJzdA==..884f496fdfc6e9b2dbef1f665104ce975dc97c55_UkVBRE1FLnJzdA== 100644
--- a/README.rst
+++ b/README.rst
@@ -51,7 +51,7 @@
 Changelog
 =========
 
-4.1.0
+4.0.1
 -----
 
 * We now build PyPy ``manylinux`` wheels.
@@ -55,6 +55,8 @@
 -----
 
 * We now build PyPy ``manylinux`` wheels.
+* Fixed a bug where passing an invalid ``salt`` to ``checkpw`` could result in
+  a ``pyo3_runtime.PanicException``. It now correctly raises a ``ValueError``.
 
 4.0.0
 -----
diff --git a/src/bcrypt/__about__.py b/src/bcrypt/__about__.py
index eb3b5bca1c8544fce0b66f59a98de81422ba84f3_c3JjL2JjcnlwdC9fX2Fib3V0X18ucHk=..884f496fdfc6e9b2dbef1f665104ce975dc97c55_c3JjL2JjcnlwdC9fX2Fib3V0X18ucHk= 100644
--- a/src/bcrypt/__about__.py
+++ b/src/bcrypt/__about__.py
@@ -32,7 +32,7 @@
 __summary__ = "Modern password hashing for your software and your servers"
 __uri__ = "https://github.com/pyca/bcrypt/"
 
-__version__ = "4.0.0"
+__version__ = "4.0.1"
 
 __author__ = "The Python Cryptographic Authority developers"
 __email__ = "cryptography-dev@python.org"