diff --git a/packages/react-dom/src/server/ReactDOMServerFormatConfig.js b/packages/react-dom/src/server/ReactDOMServerFormatConfig.js
index 53a4786f73cdf..e723299f92420 100644
--- a/packages/react-dom/src/server/ReactDOMServerFormatConfig.js
+++ b/packages/react-dom/src/server/ReactDOMServerFormatConfig.js
@@ -729,15 +729,16 @@ function pushStartOption(
             }
           }
           break;
-        case 'value':
-          value = propValue;
-          break;
         case 'dangerouslySetInnerHTML':
           invariant(
             false,
             '`dangerouslySetInnerHTML` does not work on <option>.',
           );
         // eslint-disable-next-line-no-fallthrough
+        case 'value':
+          value = propValue;
+        // We intentionally fallthrough to also set the attribute on the node.
+        // eslint-disable-next-line-no-fallthrough
         default:
           pushAttribute(target, responseState, propKey, propValue);
           break;
diff --git a/packages/react-server/src/ReactFizzServer.js b/packages/react-server/src/ReactFizzServer.js
index 1a838be226c8b..8b84ce822bccf 100644
--- a/packages/react-server/src/ReactFizzServer.js
+++ b/packages/react-server/src/ReactFizzServer.js
@@ -563,11 +563,11 @@ function renderClassComponent(
   Component: any,
   props: any,
 ): void {
-  const unmaskedContext = !disableLegacyContext
-    ? task.legacyContext
+  const maskedContext = !disableLegacyContext
+    ? getMaskedContext(Component, task.legacyContext)
     : undefined;
-  const instance = constructClassInstance(Component, props, unmaskedContext);
-  mountClassInstance(instance, Component, props, unmaskedContext);
+  const instance = constructClassInstance(Component, props, maskedContext);
+  mountClassInstance(instance, Component, props, maskedContext);
   finishClassComponent(request, task, instance, Component, props);
 }