dynamic_update_slice start index adjustment fails when vmapped
The documentation for `dynamic_update_slice` explains "If the update slice is too large to fit in the array, the start index will be adjusted to make it fit" and this behavior does indeed seem to work normally but fails when I apply vmap. No update occurs if the update slice would not fit even if the update slice would still be partially in the array as in the example below.

```python
zeros = jnp.zeros(5)
ones = jnp.ones(3)

for i in range(1, 4):
    print(jax.lax.dynamic_update_slice(zeros, ones, (jnp.array(i, dtype=int),)))

print(jax.vmap(jax.lax.dynamic_update_slice, (None, None, 0))(zeros, ones, (jnp.arange(1, 4),)))

# [0. 1. 1. 1. 0.]
# [0. 0. 1. 1. 1.]
# [0. 0. 1. 1. 1.]
# [[0. 1. 1. 1. 0.]
#  [0. 0. 1. 1. 1.]
#  [0. 0. 0. 0. 0.]]
```
diff --git a/jax/_src/lax/slicing.py b/jax/_src/lax/slicing.py
index 9a5873739..5dc40ea4d 100644
--- a/jax/_src/lax/slicing.py
+++ b/jax/_src/lax/slicing.py
@@ -933,7 +933,7 @@ def _dynamic_update_slice_batching_rule(batched_args, batch_dims):
     scatter, (operand, index, update), (operand_bd, index_bdim, update_bd),
     update_jaxpr=None, update_consts=None, dimension_numbers=dnums,
     indices_are_sorted=True, unique_indices=True,
-    mode=GatherScatterMode.PROMISE_IN_BOUNDS)
+    mode=GatherScatterMode.CLIP)
 
 
 dynamic_update_slice_p = standard_primitive(
diff --git a/jax/experimental/jax2tf/tests/shape_poly_test.py b/jax/experimental/jax2tf/tests/shape_poly_test.py
index 6c5d73380..2b8640c37 100644
--- a/jax/experimental/jax2tf/tests/shape_poly_test.py
+++ b/jax/experimental/jax2tf/tests/shape_poly_test.py
@@ -1701,6 +1701,9 @@ def _add_vmap_primitive_harnesses():
       "lu",
       "custom_linear_solve",
 
+      # Broken by https://github.com/google/jax/pull/9094
+      "dynamic_update_slice",
+
       # We do *= shapes in the batching rule for conv_general_dilated
       "conv_general_dilated",
 
diff --git a/tests/lax_test.py b/tests/lax_test.py
index f785fddc9..1a8ec5da2 100644
--- a/tests/lax_test.py
+++ b/tests/lax_test.py
@@ -1552,6 +1552,15 @@ class LaxTest(jtu.JaxTestCase):
     self._CheckAgainstNumpy(lax_reference.dynamic_update_slice,
                             lax.dynamic_update_slice, args_maker)
 
+  def testDynamicUpdateSliceBatched(self):
+    # Regression test for https://github.com/google/jax/issues/9083
+    x = jnp.arange(5)
+    y = jnp.arange(6, 9)
+    ind = jnp.arange(6)
+    expected = jnp.vstack([lax.dynamic_update_slice(x, y, (i,)) for i in ind])
+    actual = jax.vmap(lax.dynamic_update_slice, (None, None, 0))(x, y, (ind,))
+    self.assertAllClose(expected, actual)
+
   @parameterized.named_parameters(jtu.cases_from_list(
       {"testcase_name": "_shape={}_perm={}".format(
           jtu.format_shape_dtype_string(shape, dtype), perm),
['jax/experimental/jax2tf/tests/shape_poly_test.py', 'jax/_src/lax/slicing.py', 'tests/lax_test.py']